Skip to main content

Command Palette

Search for a command to run...

Why Threads?

Published
4 min readView as Markdown
Why Threads?
I

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 বানাতে হত, তাহলে:

  1. অত্যধিক context switching overhead - প্রতিটি switch এ সম্পূর্ণ CPU state সংরক্ষণ করতে হত

  2. মেমোরি ব্যবহারের অপচয় - প্রতিটি process পুরো program কোড এবং data এর কপি রাখত

  3. জটিল 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 তৈরি করতে পারি।

2 views

More from this blog

Low Level Design: গভীর থেকে বোঝা এবং আয়ত্ত করা

ভূমিকা: কেন এই Article? তুমি হয়তো programming শিখেছ। Variable, loop, function, data structure - সব জানো। কিন্তু যখন একটা বড় system বানাতে বসো, তখন মনে হয় কোথা থেকে শুরু করব? কীভাবে organize করব? Code লিখতে লিখতে হারিয়ে যাও একটা maze-এ। এই feeling...

Oct 15, 202520 min read71
Low Level Design: গভীর থেকে বোঝা এবং আয়ত্ত করা

Go-তে Interface কীভাবে Code Decouple করে?

একটা HTTP Server দিয়ে পুরো ব্যাপারটা বুঝে নেওয়া যাক আমরা সবাই জানি Go একটা সিম্পল ল্যাঙ্গুয়েজ, কিন্তু interface নিয়ে অনেকেরই confusion থাকে। আজকে আমরা দেখব কীভাবে interface আসলে তোমার code-কে flexible এবং maintainable বানায়। একটা real-world HTT...

Oct 14, 202520 min read5
Go-তে Interface কীভাবে Code Decouple করে?

তোমার Project-এ Coupled Code কীভাবে খুঁজে বের করবে?

Coupled code খোঁজা মানে হচ্ছে তোমার codebase-এ এমন জায়গা খুঁজে বের করা যেখানে একটা অংশ আরেকটার উপর বেশি depend করছে। এটা একটা detective work — তুমি clue খুঁজবে, pattern দেখবে, এবং সমস্যা চিহ্নিত করবে। চলো step by step শিখি কীভাবে এটা করতে হয়। কেন ...

Oct 14, 202510 min read2

Go-তে Object (Struct Instance) তৈরির সম্পূর্ণ গাইড

Go programming শেখার সময় একটা জিনিস খুব তাড়াতাড়ি বুঝতে হয় - কীভাবে object তৈরি করতে হয়। অন্য language যেমন Java বা Python এ class আছে, কিন্তু Go-তে আছে struct। আর struct এর instance বানানোই হলো object তৈরি করা। আজকের এই blog এ আমরা দেখব Go-তে ob...

Oct 13, 202524 min read3
Go-তে Object (Struct Instance) তৈরির সম্পূর্ণ গাইড
I

Imran Hasan

61 posts

Full-stack developer with experience in developing and managing web applications. Skilled in React, Node.js, HTML, CSS, and JavaScript. Experience in managing website hosting and security.