Schedulers কি এবং কেন ব্যবহার করা হয়?

Schedulers এবং Concurrency - আরএক্সজাভা (RxJava) - Java Technologies

296

RxJava-তে Schedulers হলো thread management এর জন্য ব্যবহৃত একটি প্রক্রিয়া। এটি বিভিন্ন thread-এ ডেটা প্রসেসিং ও কাজ চালানোর জন্য ব্যবহার করা হয়।

Reactive Programming-এ কাজগুলো asynchronous বা concurrent হওয়ায় সঠিক thread নির্বাচন করা অত্যন্ত গুরুত্বপূর্ণ। Schedulers আমাদের এই সুবিধা দেয় যাতে আমরা কাজগুলো সহজে background thread, computation thread, অথবা main thread-এ পরিচালনা করতে পারি।


Schedulers কেন ব্যবহার করা হয়?

Schedulers-এর প্রধান কাজ হলো:

  1. Thread Management সহজ করা:
    সঠিক thread-এ কাজ নির্ধারণ করা, যেমন UI কাজ main thread-এ এবং ব্যাকগ্রাউন্ড কাজ background thread-এ।
  2. Asynchronous কাজ সহজ করা:
    RxJava-তে Observable এবং Observer এর কাজগুলো বিভিন্ন thread-এ চালাতে।
  3. Performance বাড়ানো:
    Background threads-এ computational বা I/O-intensive কাজগুলো পরিচালনা করে মূল (main) thread-এর উপর চাপ কমানো।
  4. Thread Switching সহজ করা:
    সহজেই ডেটা স্ট্রিম একাধিক thread-এ পরিচালনা করা। উদাহরণস্বরূপ, I/O কাজ background thread-এ এবং UI update main thread-এ।

RxJava-তে Schedulers এর ধরণ:

RxJava বিভিন্ন ধরণের Schedulers প্রদান করে, প্রতিটি ভিন্ন ভিন্ন কাজের জন্য উপযোগী:

  1. Schedulers.io()
    • I/O operations-এর জন্য ব্যবহৃত হয়, যেমন network calls, file operations, database queries।
    • এটি একটি thread pool ব্যবহার করে যা অনেকগুলো I/O কাজ পরিচালনা করতে পারে।
    • Example: Retrofit API calls।
  2. Schedulers.computation()
    • Computationally heavy কাজের জন্য ব্যবহৃত হয়, যেমন mathematical calculations, data processing।
    • এটি CPU cores-এর উপর ভিত্তি করে threads তৈরি করে।
  3. Schedulers.newThread()
    • প্রতিবার একটি নতুন thread তৈরি করে।
    • এটি খুব বেশি ব্যবহৃত হয় না কারণ এটি resources-intensive।
  4. Schedulers.single()
    • একটি single thread-এ কাজ চালানোর জন্য ব্যবহৃত হয়।
    • এটি sequential এবং ordered কাজের জন্য উপযোগী।
  5. AndroidSchedulers.mainThread()
    • Android UI updates-এর জন্য ব্যবহৃত হয়।
    • এটি শুধুমাত্র Android ডেভেলপমেন্টে ব্যবহৃত হয়।
  6. Schedulers.trampoline()
    • একই thread-এ কাজগুলো sequentially চালানোর জন্য ব্যবহৃত হয়।
    • এটি recursive কাজের জন্য উপযুক্ত।

Schedulers ব্যবহার করার উদাহরণ:

1. Schedulers.io() Example:

import io.reactivex.Observable;
import io.reactivex.schedulers.Schedulers;

public class IoSchedulerExample {
    public static void main(String[] args) {
        Observable.fromCallable(() -> {
            // Simulating a long-running I/O operation
            Thread.sleep(1000);
            return "I/O Operation Completed!";
        })
        .subscribeOn(Schedulers.io()) // I/O কাজ background thread-এ
        .subscribe(result -> System.out.println(result + " on thread " + Thread.currentThread().getName()));
    }
}

আউটপুট:

I/O Operation Completed! on thread RxCachedThreadScheduler-1

2. Schedulers.computation() Example:

import io.reactivex.Observable;
import io.reactivex.schedulers.Schedulers;

public class ComputationSchedulerExample {
    public static void main(String[] args) {
        Observable.range(1, 5)
            .map(number -> number * number) // Computational কাজ
            .subscribeOn(Schedulers.computation()) // Computation thread-এ চালানো
            .subscribe(result -> System.out.println(result + " on thread " + Thread.currentThread().getName()));
    }
}

আউটপুট:

1 on thread RxComputationThreadPool-1  
4 on thread RxComputationThreadPool-1  
9 on thread RxComputationThreadPool-1  
16 on thread RxComputationThreadPool-1  
25 on thread RxComputationThreadPool-1  

3. AndroidSchedulers.mainThread() Example (Android):

Observable.just("Hello, RxJava!")
    .subscribeOn(Schedulers.io()) // Background thread
    .observeOn(AndroidSchedulers.mainThread()) // UI update main thread-এ
    .subscribe(result -> textView.setText(result));

subscribeOn() এবং observeOn() এর ভূমিকা

  1. subscribeOn(Scheduler):
    • এটি নির্ধারণ করে যে Observable কোন thread-এ কাজ শুরু করবে।
    • একাধিকবার ব্যবহার করলে শুধুমাত্র প্রথমটি কার্যকর হবে।
  2. observeOn(Scheduler):
    • এটি নির্ধারণ করে Observer বা Subscriber কোন thread-এ কাজ করবে।
    • একাধিকবার ব্যবহার করলে প্রতিবারই কার্যকর হবে।

Schedulers-এর সুবিধা

  1. Concurrency সহজ করে।
  2. Thread Switching-এর মাধ্যমে কাজ পরিচালনা সহজ।
  3. Performance বৃদ্ধি পায়।
  4. UI Thread-এ ব্লকিং কাজ এড়ানো যায়।

Schedulers ব্যবহার করার সেরা অনুশীলন (Best Practices):

  1. ব্যাকগ্রাউন্ড কাজের জন্য Schedulers.io() বা Schedulers.computation() ব্যবহার করুন।
  2. UI আপডেটের জন্য সর্বদা AndroidSchedulers.mainThread() ব্যবহার করুন।
  3. dispose() ব্যবহার করে subscription বন্ধ করুন, যাতে memory leaks এড়ানো যায়।
  4. বড় বা দীর্ঘ-running কাজগুলোর জন্য নতুন thread তৈরি না করে thread pools ব্যবহার করুন।

RxJava-তে Schedulers সঠিকভাবে ব্যবহার করলে আপনার প্রোগ্রামের performance এবং efficiency অনেক বৃদ্ধি পাবে।

Content added By
Promotion

Are you sure to start over?

Loading...