Linux ใช้รูปแบบเธรด 1-1 โดยที่ (ไปยังเคอร์เนล) ไม่มีความแตกต่างระหว่างกระบวนการและเธรด - ทุกอย่างเป็นงานที่รันได้ง่าย * * * *
บน Linux การเรียกระบบcloneโคลนงานโดยมีระดับการแชร์ที่กำหนดค่าได้ซึ่ง ได้แก่ :
CLONE_FILES: แชร์ตารางตัวบอกรายละเอียดไฟล์เดียวกัน (แทนที่จะสร้างสำเนา)
CLONE_PARENT: อย่าตั้งค่าความสัมพันธ์พาเรนต์ - ลูกระหว่างงานใหม่กับงานเก่า (ไม่เช่นนั้นgetppid()= child's parent getpid())
CLONE_VM: แบ่งปันพื้นที่หน่วยความจำเดียวกัน (แทนที่จะสร้างสำเนาCOW )
fork()เรียกclone(ใช้งานร่วมกันอย่างน้อย)และpthread_create()เรียกใช้งานร่วมกันมากที่สุดclone( )**
forkไอเอ็นจีมีค่าใช้จ่ายมากกว่าpthread_createไอเอ็นจีเล็กน้อยเนื่องจากการคัดลอกตารางและสร้างการแมป COW สำหรับหน่วยความจำ แต่นักพัฒนาเคอร์เนลลินุกซ์ได้ลอง (และประสบความสำเร็จ) ในการลดต้นทุนเหล่านั้น
การสลับระหว่างงานหากพวกเขาแชร์พื้นที่หน่วยความจำเดียวกันและตารางต่าง ๆ จะถูกกว่านิดหน่อยถ้าไม่ได้แชร์เพราะข้อมูลอาจถูกโหลดในแคชแล้ว อย่างไรก็ตามการสลับงานยังคงเร็วมากแม้ว่าจะไม่ได้แชร์อะไรเลยนี่เป็นสิ่งอื่นที่นักพัฒนาเคอร์เนล Linux พยายามทำให้มั่นใจ (และประสบความสำเร็จในการทำให้มั่นใจ)
ในความเป็นจริงหากคุณใช้ระบบหลายโปรเซสเซอร์การไม่แชร์อาจเป็นประโยชน์ต่อประสิทธิภาพการทำงาน: หากแต่ละงานใช้โปรเซสเซอร์อื่นการซิงโครไนซ์หน่วยความจำที่ใช้ร่วมกันนั้นมีราคาแพง
* ประยุกต์ CLONE_THREADทำให้การส่งสัญญาณถูกแบ่งใช้ (ซึ่งต้องการCLONE_SIGHANDซึ่งแบ่งใช้ตารางตัวจัดการสัญญาณ)
** แบบง่าย มีอยู่ทั้งในSYS_forkและSYS_clonesyscalls แต่ใน kernel ที่sys_forkและsys_cloneมีทั้งห่อบางมากรอบเดียวฟังก์ชั่นที่ตัวเองเป็นเสื้อคลุมรอบบางdo_fork copy_processใช่คำว่าprocess, threadและtaskมีการใช้ค่อนข้างสลับกันในลินุกซ์ ...