কম্পিউটার টিউটোরিয়াল

ইম্প্লিসিট থ্রেডিং ও ল্যাঙ্গুয়েজ-ভিত্তিক থ্রেড: OpenMP, GCD, Java, Python, Go, Rust

ইম্প্লিসিট থ্রেডিং

থ্রেড ম্যানেজমেন্টের দায়িত্ব অ্যাপ্লিকেশন ডেভেলপার থেকে কম্পাইলার/রানটাইম লাইব্রেরিতে হস্তান্তর করা হয়। এটি বর্তমানের জনপ্রিয় প্রবণতা।

OpenMP (C/C++/Fortran)

  • কম্পাইলার ডিরেক্টিভ (`#pragma omp parallel`) দিয়ে প্যারালল রিজন চিহ্নিত করা হয়
  • রানটাইম লাইব্রেরি স্বয়ংক্রিয়ভাবে থ্রেড পুল ম্যানেজ করে
  • লুপ প্যারাললাইজেশন, শেয়ার্ড/প্রাইভেট ডেটা নিয়ন্ত্রণ সুবিধা
#pragma omp parallel
    printf("I am a parallel region.");

Grand Central Dispatch (GCD) — Apple

  • C/C++ এক্সটেনশন: ব্লক (`^ { ... }`)
  • ডিসপ্যাচ কিউ (সিরিয়াল/কনকারেন্ট) দিয়ে টাস্ক শিডিউল
  • থ্রেড পুল স্বয়ংক্রিয়ভাবে রিসোর্স অনুযায়ী আকার বদলায়

জাভা থ্রেড

  • Thread ক্লাস বা Runnable ইন্টারফেস
  • run() মেথড ওভাররাইড করুন, start() দিয়ে চালু করুন

পাইথন থ্রেডিং

  • threading.Thread ক্লাস এক্সটেন্ড করে run() ইমপ্লিমেন্ট করুন
  • start() ও join() দিয়ে নিয়ন্ত্রণ

Go: গোরুটিন ও চ্যানেল

  • go func() দিয়ে লাইটওয়েট থ্রেড (গোরুটিন) সৃষ্টি
  • চ্যানেল দিয়ে মেসেজ পাসিং (CSP মডেল)
  • কনকারেন্সি ল্যাঙ্গুয়েজ ডিজাইনের কেন্দ্রে

Rust: সेफ কনকারেন্সি

  • thread::spawn(|| { ... }) দিয়ে থ্রেড সৃষ্টি
  • Ownership মডেল: ডেটা রেস কম্পাইল টাইমে রোধ করা হয়
  • move কীওয়ার্ড দিয়ে ডেটা কপি/ট্রান্সফার

উদাহরণ (Rust)

use std::thread;
fn main() {
    let mut a = 7;
    let child = thread::spawn(move || {
        a -= 1;
        println!("a = {}", a);
    });
    a += 1;
    println!("a = {}", a);
    child.join().unwrap();
}
  1. প্রিন্ট জব ক্যানسেল ও প্রিন্টার কিউ ক্লিয়ার করার উপায়

  2. সমাধান: উইন্ডোজ ১০ ও ১১-এ প্রিন্ট কিউ ডিলিট হয় না

  3. পাইথন কিউ এবং ডিকিউ: ধাপে ধাপে গাইড

  4. সি ভাষায় ইমপ্লিসিট ও এক্সপ্লিসিট টাইপ কনভার্সন