Linux menggunakan model threading 1-1, dengan (ke kernel) tidak ada perbedaan antara proses dan utas - semuanya hanyalah tugas yang dapat dijalankan. *
Di Linux, panggilan sistem clonemengkloning tugas, dengan tingkat berbagi yang dapat dikonfigurasi, di antaranya adalah:
CLONE_FILES: bagikan tabel deskriptor file yang sama (alih-alih membuat salinan)
CLONE_PARENT: jangan mengatur hubungan orangtua-anak antara tugas baru dan yang lama (jika tidak, child getppid()= parent's getpid())
CLONE_VM: berbagi ruang memori yang sama (alih-alih membuat salinan COW )
fork()panggilan clone(berbagi paling sedikit )dan pthread_create()panggilan clone(berbagi paling banyak ). **
forkBiaya sedikit lebih banyak daripada pthread_createkarena menyalin tabel dan membuat pemetaan SAP untuk memori, tetapi pengembang kernel Linux telah mencoba (dan berhasil) meminimalkan biaya-biaya tersebut.
Beralih di antara tugas, jika mereka berbagi ruang memori yang sama dan berbagai tabel, akan sedikit lebih murah daripada jika mereka tidak dibagikan, karena data mungkin sudah dimuat dalam cache. Namun, berpindah tugas masih sangat cepat walaupun tidak ada yang dibagikan - ini adalah hal lain yang coba dipastikan oleh pengembang kernel Linux (dan berhasil memastikan).
Bahkan, jika Anda menggunakan sistem multi-prosesor, tidak berbagi sebenarnya dapat bermanfaat bagi kinerja: jika setiap tugas berjalan pada prosesor yang berbeda, sinkronisasi memori bersama adalah mahal.
* Sederhana. CLONE_THREADmenyebabkan pengiriman sinyal untuk dibagikan (yang perlu CLONE_SIGHAND, yang berbagi tabel penangan sinyal).
** Sederhana. Ada keduanya SYS_forkdan SYS_clonesyscalls, tetapi di kernel, sys_forkdan sys_clonekeduanya adalah pembungkus yang sangat tipis di sekitar do_forkfungsi yang sama , yang itu sendiri adalah pembungkus tipis di sekitar copy_process. Ya, persyaratannya process,, threaddan taskdigunakan secara bergantian di kernel Linux ...