Why Threads?

A highly motivated and experienced full-stack developer with a proven track record of developing and deploying web applications. Skilled in a range of programming languages and frameworks, as well as database technologies. Comfortable working in a fast-paced environment and able to adapt to new technologies quickly. A team player who is also able to work independently when required.
ভূমিকা
আমাদের আধুনিক কম্পিউটিং জগতে thread হল একটি মৌলিক ধারণা যা modern operating systems এবং application development এর অবিচ্ছেদ্য অংশ। কিন্তু থ্রেডের আবির্ভাব কেন হল? কেন কেবল process ব্যবহার করে কাজ চালানো গেল না? আজকের এই ব্লগে আমরা এই প্রশ্নের উত্তর খুঁজব।
প্রসেস: প্রথম যুগের কাহিনী
কম্পিউটার বিজ্ঞানের শুরুর দিকে, operating system একটি কম্পিউটার প্রোগ্রামকে একটি "process" হিসেবে দেখত। প্রতিটি process নিম্নলিখিত বৈশিষ্ট্য ধারণ করে:
নিজস্ব memory space
নিজস্ব program counter
নিজস্ব registers
নিজস্ব stack
নিজস্ব heap
নিজস্ব resource allocations (files, network connections, etc.)
যখন operating system এক process থেকে অন্য process এ context switch করত, তখন সম্পূর্ণ state সংরক্ষণ করতে হত এবং নতুন process এর state load করতে হত। এই প্রক্রিয়া অত্যন্ত ব্যয়বহুল:
Process A → Context Switch → Process B
- সমস্ত CPU registers সংরক্ষণ করা
- Memory mapping বদলানো
- Cache invalidate করা
- TLB (Translation Lookaside Buffer) flush করা
- Kernel data structures আপডেট করা
সমস্যা: একটি প্রসেসের ভেতরে একাধিক কাজ
কম্পিউটার application গুলো যত জটিল হতে শুরু করল, তত বেশি parallelism এর প্রয়োজন দেখা দিল। একটি application কে নিচের মত কাজ একসাথে করতে হত:
UI আপডেট করা
নেটওয়ার্ক কমিউনিকেশন হ্যান্ডেল করা
ব্যাকগ্রাউন্ডে ডাটা প্রসেস করা
ইউজার ইনপুট গ্রহণ করা
যদি এই প্রতিটি কাজের জন্য আলাদা process বানাতে হত, তাহলে:
অত্যধিক context switching overhead - প্রতিটি switch এ সম্পূর্ণ CPU state সংরক্ষণ করতে হত
মেমোরি ব্যবহারের অপচয় - প্রতিটি process পুরো program কোড এবং data এর কপি রাখত
জটিল inter-process communication (IPC) - সবগুলো process এর মধ্যে communication মেকানিজম লাগত (pipes, sockets, shared memory, etc.)
সমাধান: থ্রেড
এই সমস্যাগুলো সমাধান করার জন্য thread concept আবিষ্কার করা হয়। Thread হল একটি process এর ভেতরে "lightweight execution unit"।
একটি process এর ভেতরে একাধিক thread থাকতে পারে যারা:
শেয়ার করে:
Code segment
Data segment
Heap memory
File descriptors
Signals
Process ID
আলাদা থাকে:
Thread ID
Stack
Register set (program counter সহ)
Thread-specific data
থ্রেড বনাম প্রসেস: কেন থ্রেড বেশি দক্ষ?
1. দ্রুত Context Switching
Thread context switch অনেক হালকা কারণ:
Thread A → Context Switch → Thread B (একই process এর ভেতরে)
- শুধু registers সংরক্ষণ করা
- Stack pointer বদলানো
- Memory mapping বদলানো লাগে না
- Cache invalidate করা লাগে না
একটি thread context switch একটি process context switch এর তুলনায় প্রায় 10-100 গুণ দ্রুত হতে পারে।
2. কম মেমোরি ফুটপ্রিন্ট
নতুন thread শুরু করা মাত্র কয়েক কিলোবাইট memory নেয় (প্রধানত stack এর জন্য), যেখানে একটি নতুন process মেগাবাইট পরিমাণ memory নিতে পারে।
3. কার্যকর ডাটা শেয়ারিং
একই process এর thread গুলো সহজেই data share করতে পারে - কারণ তারা একই memory space ব্যবহার করে। এতে কোন IPC মেকানিজম লাগে না।
4. Multi-core Processor এর সম্পূর্ণ ব্যবহার
Modern multi-core CPU তে থ্রেড গুলো সমান্তরালভাবে চলতে পারে, যা কার্যকর parallelism সক্ষম করে।
Modern Operating Systems এ থ্রেডের ধরণ
1. User-Level Threads
OS thread scheduler এর অজ্ঞাতে থাকে
Library implementation (Green threads, Goroutines)
Faster creation/scheduling
একটি OS-level thread blocking হলে সব user-level threads block হয়
2. Kernel-Level Threads
OS দ্বারা সরাসরি ম্যানেজ করা হয়
OS scheduler এর মাধ্যমে schedule করা হয়
বেশি resource লাগে
একটি thread block হলে অন্য threads চলতে থাকে
আধুনিক প্রোগ্রামিং ভাষায় থ্রেডিং
আধুনিক প্রোগ্রামিং ভাষাগুলো thread সমর্থন করে বিভিন্ন উপায়ে:
// Go - Goroutines (lightweight user-level threads)
func main() {
go func() {
// Concurrent task
}()
// Main thread continues
}
// Java - Threads
public class Main {
public static void main(String[] args) {
Thread thread = new Thread(() -> {
// Concurrent task
});
thread.start();
// Main thread continues
}
}
উপসংহার
Thread হল modern computing এর একটি অপরিহার্য অংশ যা পারফরম্যান্স, রিসোর্স ব্যবহার এবং প্রোগ্রাম ডিজাইন উন্নত করেছে। Process এর তুলনায় হালকা হওয়ায় thread গুলো concurrent programming কে অনেক বেশি accessible করেছে।
কম context switching overhead এবং shared memory access এর সুবিধার জন্য threads বিশেষ করে interactive applications, web servers, এবং database systems এ ব্যাপকভাবে ব্যবহৃত হয়।
যদিও threads তাদের নিজস্ব জটিলতা (যেমন race conditions, deadlocks) নিয়ে আসে, তারা আধুনিক computing এর একটি অপরিহার্য অংশ হিসেবে থেকে যাবে যতক্ষণ আমাদের multiple tasks একসঙ্গে করার প্রয়োজন আছে।
থ্রেডের উপযোগিতা বুঝতে পারলে, আমরা আরো efficient, responsive এবং scalable software তৈরি করতে পারি।



