asyncScheduler, queueScheduler, এবং asapScheduler এর ব্যবহার

Schedulers এবং Concurrency - আরএক্সজেএস (RxJS) - Web Development

301

RxJS-এ Schedulers এমন একটি কনসেপ্ট যা কিভাবে এবং কখন একটি Observable তার next() অথবা complete() ফাংশন কল করবে তা নিয়ন্ত্রণ করে। Schedulers এর মাধ্যমে আপনি asynchronous operations কে আরও ভালোভাবে নিয়ন্ত্রণ করতে পারেন।

RxJS তিনটি সাধারণ Scheduler সরবরাহ করে যা হলো: asyncScheduler, queueScheduler, এবং asapScheduler। এই সিডিউলারের মাধ্যমে আপনি কোডের কার্যপ্রণালী এবং টাইমিং নিয়ন্ত্রণ করতে পারবেন, বিশেষ করে অ্যাসিঙ্ক্রোনাস প্রসেসের ক্ষেত্রে। আসুন, এই তিনটি সিডিউলারের ব্যবহারের উদাহরণ দেখি।


1. asyncScheduler

asyncScheduler সিডিউলারটি অ্যাসিঙ্ক্রোনাস কার্যকলাপ চালানোর জন্য ব্যবহৃত হয়। এটি কাজ করে next tick এর মতো। এর মাধ্যমে, কোডের কার্যপ্রণালী বর্তমান call stack সম্পূর্ণ হওয়ার পরে event loop এ সরাসরি চলে আসে। এটি সাধারণত UI আপডেট বা এমন কিছু কার্যক্রমের জন্য ব্যবহার করা হয় যা সামান্য বিলম্ব নিয়ে সম্পন্ন হয়।

বৈশিষ্ট্য:

  • Asynchronous Execution: এটি কোডের কার্যপ্রণালী next tick বা event loop এ ডেলিভার করে, যার মানে পরে এক্সিকিউট হয়।
  • Performance: ব্যাকগ্রাউন্ডে নির্দিষ্ট কোড রান করার জন্য উপযোগী।

উদাহরণ:

import { of, asyncScheduler } from 'rxjs';
import { observeOn } from 'rxjs/operators';

const observable = of('Hello', 'World').pipe(
  observeOn(asyncScheduler)
);

observable.subscribe(value => {
  console.log(value);  // এটি সিডিউলডভাবে একে একে আসবে।
});

এখানে, asyncScheduler ব্যবহার করে, observable এর মানগুলো event loop এ ডেলিভার হচ্ছে, অর্থাৎ যখন মূল স্ট্রিমের execution শেষ হবে তখনই এই কোড রান হবে।


2. queueScheduler

queueScheduler সিডিউলারটি মূলত synchronous execution এর জন্য ব্যবহৃত হয়, তবে এটি এমনভাবে কাজ করে যে এটি current call stack-এ queue করে রাখে এবং যতটুকু সময় call stack খালি হবে, তখন পরবর্তী কোড রান হবে। এটি একের পর এক synchronous কার্যক্রম সম্পাদন করতে সহায়তা করে।

বৈশিষ্ট্য:

  • Synchronous Execution: এটি কোডের কার্যপ্রণালী বর্তমান call stack এর মধ্যে রাখে এবং পরবর্তী কার্যক্রমগুলো সিরিয়ালভাবে সম্পাদন করে।
  • Call Stack Queue: প্রথমে যেটি enqueue হয়, সেটি পরবর্তীতে একে একে execute হয়।

উদাহরণ:

import { of, queueScheduler } from 'rxjs';
import { observeOn } from 'rxjs/operators';

const observable = of('First', 'Second', 'Third').pipe(
  observeOn(queueScheduler)
);

observable.subscribe(value => {
  console.log(value);  // এগুলি current stack এ enqueue হবে
});

এখানে, queueScheduler ব্যবহার করে, observable এর মানগুলো current call stackqueue হয়ে থাকবে এবং একে একে সম্পাদিত হবে।


3. asapScheduler

asapScheduler সিডিউলারটি asynchronous execution-এর জন্য ব্যবহৃত হলেও, এটি asyncScheduler এর তুলনায় আরও দ্রুত কাজ করে। asapScheduler সর্বশেষ একটি কাজ current tick এ শেষ হতে দিতে চাইলে সেগুলো দ্রুত এক্সিকিউট করে। এটি microtask queue তে কাজ করে, যা event loop এর আগে চলে।

বৈশিষ্ট্য:

  • High Priority Asynchronous Execution: এটি দ্রুত microtask queue এ রান করে, যার মানে এটি খুব দ্রুত execution করতে সক্ষম।
  • Faster than asyncScheduler: asyncScheduler এর চেয়ে দ্রুত এবং অপেক্ষাকৃত কম বিলম্বিত কার্যপ্রণালী প্রদান করে।

উদাহরণ:

import { of, asapScheduler } from 'rxjs';
import { observeOn } from 'rxjs/operators';

const observable = of('Quick', 'Response').pipe(
  observeOn(asapScheduler)
);

observable.subscribe(value => {
  console.log(value);  // এটি আরও দ্রুত execution হবে।
});

এখানে, asapScheduler ব্যবহার করে observable দ্রুত run হবে, এবং খুব কম সময়ের মধ্যে microtask-এ চলে আসবে।


সারাংশ

RxJS তে Schedulers ব্যবহারের মাধ্যমে আপনি asynchronous execution এবং synchronous execution এর মধ্যে একটি কার্যকরী সামঞ্জস্য তৈরি করতে পারেন।

  • asyncScheduler: এটি কোডটি next tick-এ চলে যাওয়ার জন্য ব্যবহৃত হয়। এটি সাধারণত ব্যাকগ্রাউন্ড কার্যপ্রণালীতে ব্যবহৃত হয়।
  • queueScheduler: এটি বর্তমান call stack-এ queue করে রেখে কার্যকলাপ সিঙ্ক্রোনাসভাবে একে একে সম্পাদন করে।
  • asapScheduler: এটি দ্রুত microtask queue-এ কার্যকলাপ সম্পন্ন করে, যা সাধারণত asyncScheduler এর চেয়ে দ্রুত কাজ করে।

এই সিডিউলারের মাধ্যমে আপনি প্রোগ্রামে টাইমিং এবং কার্যপ্রণালী নিয়ন্ত্রণ করতে পারেন, যাতে ডেটা স্ট্রিমের কার্যকরী এবং নির্ভরযোগ্য সমন্বয় ঘটে।

Content added By
Promotion

Are you sure to start over?

Loading...