Linux, işlemler ve iş parçacıkları arasında (çekirdeğe) hiçbir ayrım olmaksızın 1-1 iş parçacığı modeli kullanır - her şey basitçe çalıştırılabilir bir görevdir. *
Linux'ta sistem çağrısı clone, aşağıdakiler arasında yapılandırılabilir bir paylaşım düzeyine sahip bir görevi klonlar:
CLONE_FILES: aynı dosya tanımlayıcı tablosunu paylaşma (kopya oluşturmak yerine)
CLONE_PARENT: yeni görev ve eski arasında bir ebeveyn-çocuk ilişkisi kurmayın (aksi takdirde çocuğun getppid()= ebeveyninin getpid())
CLONE_VM: aynı bellek alanını paylaşma ( COW kopyası oluşturmak yerine )
fork()çağrıları clone(az paylaşımı )ve pthread_create()aramaları clone(en paylaşımı ). **
forkpthread_createtabloları kopyalamak ve bellek için COW eşlemeleri oluşturmak nedeniyle maliyeti biraz daha fazladır , ancak Linux çekirdek geliştiricileri bu maliyetleri en aza indirmeyi denedi (ve başardı).
Aynı bellek alanını ve çeşitli tabloları paylaşıyorlarsa görevler arasında geçiş yapmak, veriler önceden önbelleğe yüklenebileceğinden paylaşılmadıklarından biraz daha ucuz olacaktır. Bununla birlikte, hiçbir şey paylaşılmasa bile görevleri değiştirmek çok hızlıdır - bu, Linux çekirdek geliştiricilerinin sağlamaya çalıştığı (ve sağlamayı başardığı) başka bir şeydir.
Birden çok işlemcili sistemde ise Aslında, değil paylaşım aslında performansa faydalı olabilir: Her görev farklı işlemci üzerinde çalışıyorsa, paylaşılan hafızayı senkronize pahalıdır.
* Basitleştirilmiş. CLONE_THREADsinyal dağıtımının paylaşılmasına neden olur (bu CLONE_SIGHAND, sinyal işleyici tablosunu paylaşır).
** Basitleştirilmiş. Orada her ikisi de mevcut SYS_forkve SYS_clonesyscalls ancak çekirdek, sys_forkve sys_cloneaynı çevresinde hem de çok ince sargı olan do_forkkendi etrafında ince bir sarıcı fonksiyonu copy_process. Evet, terimler process, threadve taskLinux çekirdeği yerine birbirinin yerine kullanılmaktadır ...