থ্রেড তৈরি এবং ম্যানেজমেন্ট

মাল্টি-থ্রেডিং এবং কনকারেন্সি (Multi-threading and Concurrency) - কম্পিউটার প্রোগ্রামিং ফান্ডামেন্টাল (Computer Programming Fundamentals) - Computer Science

199

থ্রেড হলো প্রোগ্রামের একটি হালকা ওজনের সাব-প্রক্রিয়া যা একাধিক কাজ একসাথে সম্পন্ন করতে সাহায্য করে। থ্রেড ব্যবহার করে আমরা একাধিক কাজ সমান্তরালে সম্পাদন করতে পারি, যা প্রোগ্রামের কার্যকারিতা এবং কর্মদক্ষতা বৃদ্ধি করে। থ্রেড ম্যানেজমেন্টের মাধ্যমে আমরা থ্রেডগুলোকে নিয়ন্ত্রণ করতে পারি, যেমন থ্রেড চালু করা, থ্রেড স্থগিত করা, থ্রেড বন্ধ করা ইত্যাদি।


থ্রেড তৈরি

Python-এ থ্রেড তৈরি করতে আমরা threading মডিউল ব্যবহার করতে পারি। দুটি পদ্ধতিতে থ্রেড তৈরি করা যায়:

ফাংশন ব্যবহার করে থ্রেড তৈরি: একটি নির্দিষ্ট ফাংশনকে থ্রেডের জন্য টার্গেট ফাংশন হিসেবে নির্ধারণ করে আমরা থ্রেড তৈরি করতে পারি।

ক্লাস ব্যবহার করে থ্রেড তৈরি: Thread ক্লাসটি ইনহেরিট করে আমরা থ্রেড তৈরি করতে পারি, যেখানে run() মেথডে কাজগুলো সংজ্ঞায়িত করা হয়।


উদাহরণ: ফাংশন ব্যবহার করে থ্রেড তৈরি

import threading
import time

# একটি ফাংশন যা থ্রেড হিসেবে ব্যবহার হবে
def print_numbers():
    for i in range(1, 6):
        print(i)
        time.sleep(1)

# থ্রেড তৈরি এবং শুরু করা
thread = threading.Thread(target=print_numbers)
thread.start()

# মূল থ্রেডের কাজ
print("Main thread is running...")
thread.join()  # থ্রেড শেষ হওয়া পর্যন্ত অপেক্ষা করা
print("Main thread has finished.")

আউটপুট:

Main thread is running...
1
2
3
4
5
Main thread has finished.

উদাহরণ: ক্লাস ব্যবহার করে থ্রেড তৈরি

import threading
import time

class PrintNumbersThread(threading.Thread):
    def run(self):
        for i in range(1, 6):
            print(i)
            time.sleep(1)

# থ্রেড তৈরি এবং শুরু করা
thread = PrintNumbersThread()
thread.start()

# মূল থ্রেডের কাজ
print("Main thread is running...")
thread.join()  # থ্রেড শেষ হওয়া পর্যন্ত অপেক্ষা করা
print("Main thread has finished.")

থ্রেড ম্যানেজমেন্ট

start(): start() মেথডটি থ্রেড চালু করে এবং run() মেথডকে কার্যকর করে।

join(): join() মেথডটি প্রধান থ্রেডকে থ্রেডটি শেষ হওয়া পর্যন্ত অপেক্ষা করতে বাধ্য করে। এটি সাধারণত থ্রেড সমাপ্তি নিশ্চিত করার জন্য ব্যবহৃত হয়।

is_alive(): is_alive() মেথডটি একটি থ্রেডের কার্যক্ষমতা চেক করে এবং বলে দেয় যে থ্রেডটি এখনও চলমান কিনা।

daemon প্রপার্টি: থ্রেডের daemon প্রপার্টি সেট করা থাকলে থ্রেডটি ব্যাকগ্রাউন্ডে চলবে, এবং মূল প্রোগ্রাম শেষ হলে থ্রেডটি নিজে থেকে বন্ধ হয়ে যাবে।


উদাহরণ: থ্রেড ম্যানেজমেন্ট

import threading
import time

def print_numbers():
    for i in range(1, 6):
        print(i)
        time.sleep(1)

# থ্রেড তৈরি এবং ডেমন থ্রেড সেট করা
thread = threading.Thread(target=print_numbers)
thread.daemon = True  # ডেমন থ্রেড হিসেবে সেট করা
thread.start()

# থ্রেডের কার্যক্ষমতা চেক করা
print("Is thread alive?", thread.is_alive())

# থ্রেড শেষ হওয়া পর্যন্ত অপেক্ষা করা
thread.join()
print("Main thread has finished.")

আউটপুট:

Is thread alive? True
1
2
3
4
5
Main thread has finished.

থ্রেড সিঙ্ক্রোনাইজেশন

থ্রেডগুলো যখন একই রিসোর্সে একসঙ্গে অ্যাক্সেস করতে চায়, তখন রেস কন্ডিশন হতে পারে। থ্রেডগুলোর কার্যক্রম সঠিকভাবে পরিচালনার জন্য লক (Lock) ব্যবহার করা হয়।

import threading

# একটি লক তৈরি করা
lock = threading.Lock()
counter = 0

def increase_counter():
    global counter
    with lock:  # লক ব্যবহার করা
        temp = counter
        temp += 1
        counter = temp

# থ্রেড তৈরি করা
threads = []
for _ in range(5):
    thread = threading.Thread(target=increase_counter)
    threads.append(thread)
    thread.start()

# থ্রেড শেষ হওয়া পর্যন্ত অপেক্ষা করা
for thread in threads:
    thread.join()

print("Counter value:", counter)

থ্রেড ম্যানেজমেন্টের সুবিধা ও অসুবিধা

সুবিধা:

  • একাধিক কাজ সমান্তরালে চালানো যায়।
  • সময় এবং মেমরি সাশ্রয়ী।
  • থ্রেডগুলোর সাহায্যে প্রোগ্রামের কর্মদক্ষতা বৃদ্ধি পায়।

অসুবিধা:

  • রেস কন্ডিশন এবং ডেডলকের ঝুঁকি থাকে।
  • ডিবাগিং এবং মেইনটেন্যান্স জটিল হতে পারে।
  • থ্রেড ব্যবস্থাপনায় অতিরিক্ত মেমরি খরচ হয়।

উপসংহার

থ্রেড প্রোগ্রামিং বিভিন্ন কাজ একসঙ্গে সম্পন্ন করতে সহায়ক। থ্রেড তৈরি, ম্যানেজ এবং সিঙ্ক্রোনাইজেশন সঠিকভাবে করা হলে প্রোগ্রামের কর্মদক্ষতা বৃদ্ধি পায়। তবে রেস কন্ডিশন এবং ডেডলকের মতো সমস্যা এড়ানোর জন্য থ্রেড ব্যবস্থাপনায় সতর্ক থাকা জরুরি।

Promotion

Are you sure to start over?

Loading...