RxJava-তে Schedulers হলো থ্রেড ম্যানেজমেন্টের জন্য ব্যবহৃত একটি উপাদান। এটি নির্ধারণ করে যে কোন থ্রেডে কাজটি সম্পন্ন হবে।
RxJava-তে সাধারণত তিনটি গুরুত্বপূর্ণ Scheduler রয়েছে:
- IO Scheduler
- Computation Scheduler
- New Thread Scheduler
এগুলো বিভিন্ন ধরণের অ্যাসিঙ্ক্রোনাস কাজ করার জন্য ব্যবহৃত হয়।
1. IO Scheduler
- উপযুক্ত কাজ:
এটি I/O সম্পর্কিত কাজ যেমন ডেটাবেস কল, REST API রিকোয়েস্ট, ফাইল অপারেশন, বা নেটওয়ার্ক রিকোয়েস্ট-এর জন্য উপযুক্ত। - বিশেষ বৈশিষ্ট্য:
- এটি একটি thread pool ব্যবহার করে।
- প্রতিটি কাজের জন্য আলাদা থ্রেড বরাদ্দ করে।
- থ্রেড পুনঃব্যবহার করতে সক্ষম।
- ব্যবহার:
Schedulers.io()।
উদাহরণ:
Observable.fromCallable(() -> {
// কোনো I/O কাজ (যেমন ফাইল পড়া বা API কল)
Thread.sleep(1000); // Simulating delay
return "Data fetched from API";
})
.subscribeOn(Schedulers.io())
.observeOn(Schedulers.single())
.subscribe(System.out::println);
2. Computation Scheduler
- উপযুক্ত কাজ:
CPU-ইনটেনসিভ কাজ যেমন ডেটা প্রসেসিং, অ্যালগরিদম চালনা, বা হিসাব-সংক্রান্ত কাজের জন্য। - বিশেষ বৈশিষ্ট্য:
- এটি একটি fixed-size thread pool ব্যবহার করে।
- থ্রেড সংখ্যা ডিভাইসের CPU কোরের সমান।
- এটি I/O সম্পর্কিত কাজের জন্য নয়।
- ব্যবহার:
Schedulers.computation()।
উদাহরণ:
Observable.range(1, 10)
.map(i -> {
System.out.println("Processing on: " + Thread.currentThread().getName());
return i * 2; // Computational task
})
.subscribeOn(Schedulers.computation())
.observeOn(Schedulers.single())
.subscribe(result -> System.out.println("Received: " + result));
3. New Thread Scheduler
- উপযুক্ত কাজ:
যখন প্রতিবার একটি নতুন থ্রেড তৈরি করা প্রয়োজন, যেমন স্বতন্ত্র কাজ যেখানে থ্রেড পুনঃব্যবহার করা ঠিক নয়। - বিশেষ বৈশিষ্ট্য:
- এটি প্রতিটি কাজের জন্য একটি নতুন থ্রেড তৈরি করে।
- এটি অনেক বেশি থ্রেড তৈরি করে, যা অতিরিক্ত ব্যয়বহুল হতে পারে।
- ব্যবহার:
Schedulers.newThread()।
উদাহরণ:
Observable.create(emitter -> {
emitter.onNext("Task started");
Thread.sleep(500);
emitter.onNext("Task completed");
emitter.onComplete();
})
.subscribeOn(Schedulers.newThread())
.observeOn(Schedulers.single())
.subscribe(System.out::println);
Schedulers-এর সংমিশ্রণ
RxJava-তে আপনি সাধারণত দুটি Scheduler ব্যবহার করেন:
- subscribeOn(Scheduler):
কোন Scheduler-এ Observable কাজ করবে তা নির্ধারণ করে। - observeOn(Scheduler):
কোন Scheduler-এ Observer কাজ করবে তা নির্ধারণ করে।
উদাহরণ:
Observable.just("Task")
.subscribeOn(Schedulers.io()) // কাজ I/O থ্রেডে সম্পন্ন হবে
.observeOn(Schedulers.computation()) // রেজাল্ট computation থ্রেডে প্রসেস হবে
.subscribe(result -> System.out.println("Received on: " + Thread.currentThread().getName()));
তুলনামূলক বিশ্লেষণ
| Scheduler | ব্যবহারযোগ্যতা | থ্রেড ব্যবস্থাপনা | উদাহরণ কাজ |
|---|---|---|---|
| IO Scheduler | I/O সম্পর্কিত কাজ | থ্রেড পুল, থ্রেড পুনঃব্যবহার | REST API, ফাইল পড়া বা লেখা |
| Computation Scheduler | CPU-ইনটেনসিভ কাজ | Fixed-size (CPU cores অনুযায়ী) | ডেটা প্রসেসিং, অ্যালগরিদম চালনা |
| New Thread Scheduler | স্বতন্ত্র নতুন থ্রেড প্রয়োজন | প্রতিবার নতুন থ্রেড তৈরি | নির্দিষ্ট স্বতন্ত্র কাজ |
প্রধান বিষয়:
- IO Scheduler: অধিকাংশ অ্যাসিঙ্ক্রোনাস কাজের জন্য আদর্শ।
- Computation Scheduler: CPU-নির্ভর কাজের জন্য সেরা।
- New Thread Scheduler: বিশেষ পরিস্থিতিতে স্বতন্ত্র নতুন থ্রেড প্রয়োজন হলে ব্যবহার করুন।
Schedulers নির্বাচন করার সময় কাজের ধরন এবং পারফরম্যান্স প্রয়োজনীয়তা বিবেচনা করুন।
Content added By
Read more