Thread
থ্রেড
একই address space ভাগ করা একটা execution context। নিজস্ব stack, register আর TLS থাকে; heap, global আর file descriptor শেয়ার করে।
কী শেয়ার হয় আর কী হয় না:
| শেয়ার করা | আলাদা |
|---|---|
| text, heap, global | stack |
| file descriptor table | register set |
| signal handler | TLS, errno |
| working directory | kernel stack |
Linux-এর দৃষ্টিতে thread আর process-এর পার্থক্য প্রায় নেই।
দুটোই একটা task_struct; পার্থক্য শুধু clone()-এর flag-এ:
clone(CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND | CLONE_THREAD, ...)
CLONE_VM না দিলে সেটা process, দিলে thread। একই syscall।
1:1 বনাম M:N — Linux NPTL-এ প্রতিটা user thread একটা kernel thread (1:1)। আগের LinuxThreads আর কিছু ভাষার green thread (Go-র goroutine, Java-র virtual thread) M:N — বহু user thread কম kernel thread-এর উপর, user space-এ scheduling করে।
ps -eLf | head # L = thread দেখায়
ls /proc/<pid>/task/ # প্রতিটা thread একটা directory