Thread Yielding এবং Thread.yield() এর ব্যবহার

Thread Management এবং Control - জাভা কনকারেন্সি (Java Concurrency) - Java Technologies

332

Thread Yielding কী?

Thread Yielding হলো জাভার কনকারেন্সি মডেলে একটি প্রক্রিয়া, যেখানে একটি চলমান থ্রেড (Executing Thread) ইচ্ছাকৃতভাবে সিপিইউ থেকে সরে দাঁড়ায় (pause করে) এবং একই প্রায়োরিটি (priority) সম্পন্ন অন্য থ্রেডগুলোকে সিপিইউ সময় (CPU time) পেতে সাহায্য করে।


Thread.yield() কী?

Thread.yield() হলো একটি স্ট্যাটিক মেথড যা জাভার থ্রেড ক্লাসে পাওয়া যায়। এটি একটি টুল যা থ্রেডকে স্বেচ্ছায় তার এক্সিকিউশন থামিয়ে শিডিউলারকে বলে যে এটি তার কাজ সম্পূর্ণ করার জন্য অন্য থ্রেডকে সুযোগ দিতে চায়।

মূল পয়েন্ট:

  1. Thread.yield() কোনো থ্রেডকে সম্পূর্ণভাবে থামায় না, এটি কেবলমাত্র সিপিইউ শিডিউলারকে জানায় যে থ্রেডটি সাময়িকভাবে সরে যেতে চায়।
  2. এটি মূলত শিডিউলার-নির্ভর। কোনো নিশ্চয়তা নেই যে অন্য থ্রেডটি সুযোগ পাবে।
  3. এটি থ্রেডের প্রায়োরিটি এবং অপারেটিং সিস্টেমের থ্রেড শিডিউলিং অ্যালগরিদমের উপর নির্ভর করে।

Thread.yield() কেন ব্যবহার করা হয়?

  1. থ্রেড কনটেক্সট সুইচিং সহজ করা:
    একাধিক থ্রেডকে সিপিইউ ব্যবহার করার জন্য সুযোগ প্রদান করে।
  2. লোড শেয়ারিং (Load Sharing):
    দীর্ঘমেয়াদী চলমান কাজের সময় অন্য থ্রেডগুলোর জন্য সময় বরাদ্দ করার জন্য।
  3. ডেডলক এড়ানো:
    একাধিক থ্রেডের মধ্যে ব্লক হওয়া বা স্থবিরতা (stuck) এড়ানোর জন্য।
  4. প্রোডাক্টিভ ইফিশিয়েন্সি বাড়ানো:
    লম্বা রানিং থ্রেডের সময় সিপিইউ এর কার্যক্ষমতা সঠিকভাবে শেয়ার করার জন্য।

Thread.yield() উদাহরণ

১. সাধারণ উদাহরণ:

class YieldExample implements Runnable {
    public void run() {
        for (int i = 0; i < 5; i++) {
            System.out.println(Thread.currentThread().getName() + " is running. Count: " + i);
            // Yield CPU time to other threads
            Thread.yield();
        }
    }
}

public class ThreadYieldDemo {
    public static void main(String[] args) {
        Thread thread1 = new Thread(new YieldExample(), "Thread-1");
        Thread thread2 = new Thread(new YieldExample(), "Thread-2");

        thread1.start();
        thread2.start();
    }
}

আউটপুট (সম্ভাব্য):

Thread-1 is running. Count: 0
Thread-2 is running. Count: 0
Thread-1 is running. Count: 1
Thread-2 is running. Count: 1
...

বিঃদ্রঃ: আউটপুট নির্ভর করে থ্রেড শিডিউলিং-এর উপর, তাই ফলাফল ভিন্ন হতে পারে।


২. প্রায়োরিটি সহ Thread.yield()

class PriorityYieldExample implements Runnable {
    public void run() {
        for (int i = 0; i < 5; i++) {
            System.out.println(Thread.currentThread().getName() + " is running with priority: " +
                               Thread.currentThread().getPriority() + ". Count: " + i);
            Thread.yield();
        }
    }
}

public class ThreadPriorityYieldDemo {
    public static void main(String[] args) {
        Thread thread1 = new Thread(new PriorityYieldExample(), "Thread-1");
        Thread thread2 = new Thread(new PriorityYieldExample(), "Thread-2");

        // সেট প্রায়োরিটি
        thread1.setPriority(Thread.MIN_PRIORITY); // সর্বনিম্ন প্রায়োরিটি
        thread2.setPriority(Thread.MAX_PRIORITY); // সর্বোচ্চ প্রায়োরিটি

        thread1.start();
        thread2.start();
    }
}

আউটপুট (সম্ভাব্য):

Thread-2 is running with priority: 10. Count: 0
Thread-2 is running with priority: 10. Count: 1
Thread-1 is running with priority: 1. Count: 0
...

Thread.yield() এর সীমাবদ্ধতা

  1. শিডিউলার-নির্ভর:
    Thread.yield() নিশ্চিত করে না যে অন্য থ্রেড আসলে সুযোগ পাবে।
  2. উন্নত প্ল্যাটফর্মে সীমিত কার্যকারিতা:
    কিছু JVM বা অপারেটিং সিস্টেমে এটি কার্যকরভাবে কাজ নাও করতে পারে।
  3. উন্নত থ্রেডিং টুলস উপলব্ধ:
    উন্নত টুলস যেমন ExecutorService এবং ForkJoinPool ব্যবহারে Thread.yield() এর প্রয়োজনীয়তা অনেক সময় কমে যায়।

যখন Thread.yield() ব্যবহার করবেন:

  • থ্রেডিং লজিকে সাময়িক বিরতি দরকার হলে।
  • অন্যান্য থ্রেডের জন্য সিপিইউ সময় ভাগ করার জন্য।
  • ডেডলক বা রেস কন্ডিশন এড়ানোর জন্য।

Thread.yield() একটি সহায়ক মেথড, তবে এটি ব্যবহার করার সময় প্ল্যাটফর্ম-নির্ভর আচরণের কারণে যথাযথ বিবেচনা প্রয়োজন। আধুনিক কনকারেন্সি টুলস (যেমন Executor Framework) এর বিকল্প হিসেবে এটি অনেক ক্ষেত্রে কম কার্যকর। তবুও, যখন থ্রেডিং ব্যবস্থাপনার প্রাথমিক নিয়ন্ত্রণ দরকার হয়, তখন এটি কার্যকর একটি হাতিয়ার।

Content added By
Promotion

Are you sure to start over?

Loading...