লিনাক্স 1-1 থ্রেডিং মডেল ব্যবহার করে, (কার্নেলের সাথে) প্রক্রিয়া এবং থ্রেডের মধ্যে কোনও পার্থক্য নেই - সবকিছু কেবল একটি চলমান কাজ task *
লিনাক্সে, সিস্টেম কলটি clone
ভাগ করে নেওয়ার যোগ্য একটি কনফিগার স্তরের সাথে একটি কাজকে ক্লোন করে দেয়:
CLONE_FILES
: একই ফাইল বর্ণনাকারী টেবিল ভাগ করুন (একটি অনুলিপি তৈরির পরিবর্তে)
CLONE_PARENT
: নতুন টাস্ক এবং পুরানোের মধ্যে পিতা-মাতার সম্পর্ক স্থাপন করবেন না (অন্যথায়, সন্তানের getppid()
= পিতামাতার getpid()
)
CLONE_VM
: একই মেমরি স্পেস ভাগ করুন (একটি COW অনুলিপি তৈরির পরিবর্তে )
fork()
কল clone(
অন্তত শেয়ারিং )
এবং pthread_create()
কল clone(
সবচেয়ে শেয়ারিং )
। **
fork
pthread_create
টেবিলগুলি অনুলিপি করা এবং মেমরির জন্য COW ম্যাপিং তৈরি করার কারণে আইএনআইয়ের চেয়ে কিছুটা বেশি ব্যয় হয় তবে লিনাক্স কার্নেল বিকাশকারীরা সেই ব্যয়গুলি হ্রাস করার চেষ্টা করেছেন (এবং সফল)।
কার্যগুলির মধ্যে স্যুইচিং, যদি তারা একই মেমোরি স্পেস এবং বিভিন্ন টেবিল ভাগ করে নেয় তবে ভাগ না করা হলে তার চেয়ে সামান্য কিছুটা সস্তা হবে, কারণ ডেটা ইতিমধ্যে ক্যাশে লোড হতে পারে। যাইহোক, কিছুই ভাগ না করা সত্ত্বেও স্যুইচিং কার্যগুলি খুব দ্রুত - এটি লিনাক্স কার্নেল বিকাশকারীরা নিশ্চিত করার চেষ্টা করে (এবং নিশ্চিত করার ক্ষেত্রে সফল হন)।
প্রকৃতপক্ষে, আপনি যদি একটি মাল্টি-প্রসেসর সিস্টেমে থাকেন তবে ভাগ না করা আসলে কার্য সম্পাদনের পক্ষে উপকারী হতে পারে: যদি প্রতিটি কাজ একটি পৃথক প্রসেসরের উপর চলমান থাকে, তবে ভাগ করা মেমরি সিঙ্ক্রোনাইজ করা ব্যয়বহুল।
সরল। CLONE_THREAD
সংকেত বিতরণ ভাগ করে তোলে (যা প্রয়োজন CLONE_SIGHAND
, যা সংকেত হ্যান্ডলার টেবিল ভাগ করে)।
** সরলীকৃত। উভয়ই আছে SYS_fork
এবং SYS_clone
সিস্কলগুলি রয়েছে, তবে কার্নেলের মধ্যে sys_fork
এবং sys_clone
উভয়ই একই do_fork
ফাংশনটির চারপাশে খুব পাতলা র্যাপার রয়েছে , যা নিজেই চারপাশে একটি পাতলা মোড়ক copy_process
। হ্যাঁ, পদগুলি process
, thread
এবং task
লিনাক্স কার্নেলের পরিবর্তে পরিবর্তে ব্যবহৃত হয় ...