Skip to main content

Command Palette

Search for a command to run...

সিরিজ: কম্পিউটার এক্সিকিউশন মডেল (Thread)

Published
•3 min read•View as Markdown

“Thread: একই প্রসেসে বহু হাত, একসাথে অনেক কাজ”

আপনি যখন আপনার কম্পিউটারে কোনো সফটওয়্যার চালান—ধরুন একটি ব্রাউজার, তখন আপনি লক্ষ্য করবেন সেখানে একাধিক ট্যাব খোলা, একটি পেজ লোড হচ্ছে, অন্যদিকে ভিডিও চালছে, আবার অন্য ট্যাবে টাইপ করছেন। এখন প্রশ্ন হচ্ছে—এই সমস্ত কাজ কীভাবে একসাথে চলছে, যখন এটি একটি মাত্র সফটওয়্যার?

এর উত্তর লুকিয়ে আছে Thread নামক একটি শক্তিশালী ধারণার মধ্যে।


Thread কী?

একটি Thread হলো একটি প্রসেসের ভেতরের সবচেয়ে ছোট এক্সিকিউশন ইউনিট।

যেমন:
একটি Process হচ্ছে একটি অফিস—পুরো অফিস একটি স্বাধীন প্রতিষ্ঠান (যেমন একটি সফটওয়্যার)। আর Thread হচ্ছে সেই অফিসের ভিতরে কাজ করা বিভিন্ন কর্মচারী, যারা একসাথে আলাদা আলাদা কাজ করছে—কিন্তু সবার লক্ষ্য একটাই: অফিসের উদ্দেশ্য পূরণ।

প্রসেসের মতো Thread নিজে থেকে সম্পূর্ণ স্বাধীন নয়, তবে সে প্রসেসের মেমোরি, কোড ও রিসোর্স শেয়ার করে এবং আলাদা রেজিস্টার, স্ট্যাক ইত্যাদি ব্যবহার করে কাজ চালিয়ে যায়।


কেন Thread প্রয়োজন?

ধরুন আপনি একটি ভিডিও প্লেয়ার অ্যাপ বানাচ্ছেন। সেই অ্যাপে তিনটি কাজ রয়েছে:

  • ভিডিও ডিকোড হচ্ছে

  • ইউজার প্লে/পজ বাটন চাপছে

  • সাউন্ড আউটপুট হচ্ছে

এই তিনটি কাজ যদি একটার পর একটা করা হয়, তাহলে ভিডিও আটকে যাবে, সাউন্ড দেরি করবে, আর ইউজার ক্লিক করলে অ্যাপ হ্যাং করে থাকবে।

এখন যদি আপনি প্রতিটি কাজের জন্য একটি করে Thread ব্যবহার করেন—তাহলে:

  • এক Thread ভিডিও প্রসেস করবে

  • আরেক Thread সাউন্ড প্লে করবে

  • তৃতীয় Thread ইউজার ইন্টারঅ্যাকশন দেখবে

এভাবেই Thread ব্যবহার করে একটি অ্যাপ্লিকেশন responsive, fast, এবং efficient হয়।


Thread কখন তৈরি করা হয়?

Thread তৈরি করার সময় মূলত দুটি ধরণে হয়ে থাকে:

  1. At process start – অনেক সফটওয়্যার শুরুতেই একাধিক Thread তৈরি করে নেয় (predefined worker threads)

  2. On-demand – কোনো বিশেষ কাজ শুরু হলে তখন নতুন Thread তৈরি হয়, যেমন HTTP request পেলে নতুন Thread বা Goroutine শুরু করা

উদাহরণ:
একটি ওয়েব সার্ভার প্রথমে শুরু হয় মাত্র একটি Main Thread নিয়ে। যখন কোনো ইউজার রিকোয়েস্ট পাঠায়, তখন সেই রিকোয়েস্ট হ্যান্ডল করার জন্য নতুন একটি Thread তৈরি হয়—এভাবে প্রতিটি ইউজারের জন্য আলাদা আলাদা Thread তৈরি হয়।


Thread না থাকলে কী হতো?

Thread না থাকলে একটি প্রসেসে সব কাজ একটার পর একটা করতে হতো। যেমন:

  • প্রথমে আপনি ভিডিও লোড করলেন

  • তারপর ইউজার ইনপুট পড়লেন

  • তারপর সাউন্ড প্লে করলেন

এই ধারাবাহিকতা খুব ধীর, রেসপন্স কম এবং ইউজারের অভিজ্ঞতা খুব খারাপ হতো। একেই বলে blocking behavior।

অর্থাৎ যদি এক কাজ বেশি সময় নেয়, তাহলে পরবর্তী সব কাজ আটকে যাবে।

আরেকটি বড় সমস্যা হতো scalability।

ধরুন আপনার একটি সার্ভার অ্যাপ আছে যেখানে একসাথে ১০০ জন ইউজার রিকোয়েস্ট পাঠাচ্ছে। এখন যদি Thread না থাকে, তাহলে সব রিকোয়েস্ট সিরিয়ালি সার্ভ করতে হতো। অথচ Thread-এর মাধ্যমে প্রতিটি রিকোয়েস্ট আলাদাভাবে হ্যান্ডেল করা যায়, তাও সমান্তরালে।


Thread-এর আচরণ

প্রত্যেকটি Thread-এর থাকে:

  • নিজস্ব Stack (লোকাল ভ্যারিয়েবল সংরক্ষণের জন্য)

  • নিজস্ব Instruction Pointer (বর্তমানে কোন ইনস্ট্রাকশন চলছে তা দেখায়)

  • নিজস্ব রেজিস্টার কন্টেক্সট

কিন্তু, সব Thread একই প্রসেসের:

  • Code Segment

  • Data Segment

  • Heap

  • File Descriptors

এই শেয়ারিং-এর কারণে Thread গুলো একে অপরের সাথে দ্রুত যোগাযোগ করতে পারে—যা Inter-Thread Communication সহজ করে তোলে।


বাস্তব উদাহরণ দিয়ে ভাবুন

একটি রেস্টুরেন্টকে কল্পনা করুন।
আপনার কাছে ১০টি অর্ডার এসেছে। এখন যদি আপনি একাই প্রতিটি অর্ডার রান্না করেন, গ্লাস পরিষ্কার করেন, বিল নেন—তাহলে ১০টি কাজ শেষ হতে অনেক দেরি হবে।

কিন্তু যদি আপনি ৩ জন কর্মচারী রাখেন:

  • একজন কিচেনে রান্না করছে

  • একজন কাস্টমার সার্ভ করছে

  • একজন টাকা নিচ্ছে

তাহলে আপনি দেখতে পাবেন, একসাথে অনেক কাজ দ্রুত শেষ হচ্ছে—এটাই হলো Thread-এর শক্তি।

🖊️ আল হাসিব
📅 চ্যালেঞ্জ: ৩০ দিনে ৩০টি ব্লগ পোস্ট
📂 বিষয়: Execution Model, Thread, System Programming**

More from this blog

Redis Data Structure

অনেকেই Redis-কে শুধু একটি key-value ডেটাবেস হিসেবে মনে করেন, কিন্তু এটি তার চেয়ে অনেক বেশি কিছু। Redis আমাদের এমন কিছু শক্তিশালী ডেটা স্ট্রাকচার দেয়, যা দিয়ে অনেক জটিল কাজ খুব সহজে এবং দ্রুত সমাধান করা যায়। চলুন, এক এক করে পরিচিত হওয়া যাক এদের সাথে। ...

Aug 18, 20253 min read4
Redis Data Structure

Redis এর প্রয়োজনীয়তা

Redis: কেন এটি শুধু একটি ডেটাবেস নয়, আপনার অ্যাপ্লিকেশনের সুপারপাওয়ার! আপনি যদি একজন ডেভেলপার হয়ে থাকেন, তাহলে নিশ্চয়ই চাইবেন আপনার অ্যাপ্লিকেশনটি হোক দ্রুত, নির্ভরযোগ্য এবং স্কেলেবল। আগের পর্বে আমরা Redis কী তা জেনেছি। আজকে আমরা দেখব, কেন Redis আধুন...

Aug 17, 20254 min read2
Redis এর প্রয়োজনীয়তা

Redis: A speedy In-memory Database system

আমরা প্রতিদিন অসংখ্য তথ্য নিয়ে কাজ করি, যেমন—মোবাইলে কন্টাক্ট নাম্বার, ই-কমার্স সাইটে কেনাকাটার তালিকা, বা সোশ্যাল মিডিয়ায় বন্ধুদের পোস্ট। এই সব তথ্য কোথাও না কোথাও জমা হয়। কিন্তু সব তথ্যের ধরন বা ব্যবহারের প্রয়োজনীয়তা একরকম নয়। কিছু তথ্য আছে ...

Aug 16, 20253 min read1
Redis: A speedy In-memory Database system

Class "static" Member in OOP

প্রোগ্রামিং-এর জগতে, ডেটা এবং ফাংশনগুলো কীভাবে মেমোরিতে রাখা হবে, তার উপর আমাদের কোডের কার্যকারিতা, speed এবং মেমোরি usage অনেকাংশে নির্ভর করে। এমন অনেক সময় আসে যখন আমরা চাই কিছু ডেটা বা ফাংশন যেনো কোনো নির্দিষ্ট ক্লাসের সব অবজেক্টের জন্য একটাই কপি ...

Aug 15, 20254 min read2
Class "static" Member in OOP

Object Oriented Programming Part -1

আপনি সফটওয়্যার বানানোর সময় প্রায়ই দু’টো বড় চ্যালেঞ্জের সম্মুখীন হবেন— প্রথম হলো complexity আর দ্বিতীয় হলো code changes। কোড যত বড় হয়, কোড বোঝো, চেঞ্জ করা, bug ফিক্স করা তত কঠিন হতে থাকে। Object-Oriented Programming (OOP) এমন এক programming style যেখা...

Aug 13, 20255 min read1
Object Oriented Programming Part -1

Thinking and Doing

22 posts