İpler vs Linux Süreçleri
Ben zaten son zamanlarda duyduğum bir kaç kişi söylemek Linux, hemen hemen her zaman daha iyi işler için kullanmak yerine konuları, beri Linux çok verimli işleme süreçleri, ve çünkü o kadar çok sorun (kilitleme) ile ilgili konuları. İş parçacığı bazı durumlarda oldukça büyük bir performans artışı verebilir gibi görünüyor, çünkü ancak, şüpheli duyuyorum.
Benim sorum, iş parçacığı ve işlemlerin her ikisi de oldukça iyi başa çıkabileceği bir durum ile karşı karşıya zaman, işlemler veya iş parçacıkları kullanmalıyım? Örneğin, eğer bir web server yazıyor olsam, işlemler veya iş parçacıkları (veya bir kombinasyonu) kullanmalıyım?
CEVAP
Linux 1-1 bir iş parçacığı modeli kullanır, (çekirdek) süreçler ve evreler arasındaki ayrım her şey sadece çalıştırılabilir bir iştir. *
Linux üzerinde sistem clone
klonlar bir görev, hangi arasında paylaşımı ayarlanabilir seviyesi ile arama:
CLONE_FILES
: Aynı dosya tanımlayıcı tablosu (yerine bir kopyasını oluşturma paylaşınCLONE_PARENT
: yeni görev ve eski arasında ebeveyn-çocuk ilişkisi (aksi takdirde, çocukgetppid()
= üstgetpid()
) ayarlamaCLONE_VM
: aynı bellek alanını (yerine İNEK bir kopyasını oluşturma)
fork()
)
pthread_create()
clone(
)
çağrı paylaşımıclone(
az paylaşım çağırır. **
fork
ıng maliyetleri bir nebze daha pthread_create
ıng nedeniyle kopyalama ve tablo oluşturma İNEK eşleştirmeleri için bellek, ama Linux çekirdeği geliştiricileri çalıştı (ve başarılı) bu maliyetleri en aza indirmek.
Eğer bellek alanı ve çeşitli tablolar paylaşırlar eğer görevler arasında geçiş yapmak, eğer veri önbellek zaten yüklü olabilir, çünkü paylaşılan, değilse daha bir nebze daha ucuz olacak. Ancak, geçiş görevleri ise hiçbir şey paylaşılır bile hala çok hızlı bu çekirdek Linux başka bir şey geliştiriciler sağlamak için deneyin (ve başarılı olmasını sağlayacak).
Aslında, eğer işlemcili bir sistem,değileğer her görev farklı bir işlemci üzerinde çalışıyorsa, senkronizasyon paylaşılan bellek pahalıdır. paylaşım aslında performans için yararlı olabilir:
* Basitleştirilmiş. CLONE_THREAD
sinyaller teslimat sinyal işleyicisi masayı paylaşan CLONE_SIGHAND
, ihtiyacı olan paylaşılan neden olur.
** Basitleştirilmiş. Var hem SYS_fork
SYS_clone
sistem çağrıları, ama içinde çekirdek, sys_fork
sys_clone
Her ikisi de çok ince sargı etrafında aynı do_fork
işlev, kendisi bir ince etrafında sarıcı copy_process
. Evet, process
, thread
task
oldukça terimleri eş anlamlı olarak kullanılmıştır Linux çekirdeği
Nasıl bu kadar kesin bir yaş daha eski...
Nasıl Linux bir gruptaki tüm kullanıcı...
Linux bash: Çoklu değişken atama...
Nasıl e-postalar büyük sayıda linux po...
Linux otomatik olarak tekrar komut...