Linux sunucumu işlem başına 10.000 iş parçacığını işleyecek şekilde optimize et
Diğerlerinin açıkladığı gibi, bu genellikle yanlıştır. Bir iş parçacığı pahalı bir kaynaktır kendi vardır, özellikle, çünkü çağrı yığınını (genellikle bir megabyte) ve çekirdek tarafından bir görev zamanlanabilen çünkü. İş parçacıkları, açılan dosya tanımlayıcılarından daha da maliyetlidir .
İşletim Sistemlerini Okuyun : Üç Kolay Parça (serbestçe indirilebilir ders kitabı).
Genel bir kural olarak, çok fazla iş parçacığı ve kesinlikle çalıştırılabilir iş parçacığı istemezsiniz. Çalıştırılabilir ipliklerin sayısı genellikle en fazla çekirdek (veya bunun küçük bir katı) olmalıdır, bu yüzden en fazla yaklaşık bir düzine olmalıdır. Bir işlemdeki iş parçacığı sayısı biraz daha fazla olabilir. Dolayısıyla, çok geniş bir sunucunuz yoksa (birçok işlemci soketi ve çekirdeği ile), bir düzineden fazla çalıştırılabilir iş parçacığı ve işleminizde (çoğu boşta olan) yüz iş parçacığının (çoğu boşta) olmasını istemezsiniz .
Linux'ta, iş parçacıkları ve işlemler çok benzerdir (çünkü her ikisi de klon (2) tarafından oluşturulabilir ) ve her ikisi de çekirdek tarafından zamanlanan görevlerdir. Aslında çekirdek zamanlayıcı, bazı çok iş parçacıklı işlemin içinde iş parçacıkları veya tek iş parçacıklı bir işlemin tek ana iş parçacığı (bu durumda, bu tek iş parçacığını "işleyeceksiniz") veya çekirdek iş parçacıkları olabilecek zamanlama görevleridir. Muhtemelen masaüstü sisteminizde toplamda binden fazla zamanlanabilir göreve sahip olmak istemezsiniz.
Linux'ta bir işlem , aynı sanal adres alanını paylaşan (ve dosya tanımlayıcı tablosu vb. Gibi başka şeyleri paylaşan) bir iş parçacığı grubudur . Bazı işlemlerin yalnızca bir iş parçacığı vardır.
Bir sanal adres alanı olduğu belirlenen şekilde Wikipedia tarafından
"Bir işletim sisteminin bir işlem için kullanılabilir kıldığı sanal adres aralıkları kümesi"
(ancak terminolojinin evrensel olmadığını ve bu Microsoft belgelerinin farklı ve uyumsuz bir tanım kullandığını açıklayan bu cevaba bakınız ).
Linux'ta, proc (5) bazı işlemlerin sanal adres alanını anlamak için kullanışlıdır. Her ikisini de
cat /proc/self/maps
ve cat /proc/$$/maps
bir terminalde deneyin . Ayrıca bkz , bu ve pmap (1) ve PS (1) ve üst (1) .
Tüm kullanıcı-alanı programları bir işlemde çalışıyor ve sanal bellek kullanıyor, böylece her işlemin kendi sanal adres alanı var. Fiziksel RAM , Linux çekirdeği tarafından yönetilen bir kaynaktır ve uygulamaların RAM'e doğrudan erişimi yoktur ( mmap (2) -ing dışında /dev/mem
, bkz. Mem (4) ).
Yani bir işlem doğrudan RAM kullanmaz . Sanal bellek kullanır ve kendi sanal adres alanına sahiptir. Çekirdek kullanır çağrı fiziksel RAM yönetmek için sayfaları ve sanal adres alanı ve süreci sağlamak soyutlamalar . Herhangi bir zamanda (işleminiz boştayken veya çalışırken) çekirdek bazı sayfaları dışarı çıkarabilir (örn. Bunları diskte değiştirebilirsiniz). Çekirdek MMU'yu yapılandırıyor (ve sayfa kesinti işleyicilerinde , sayfa diskten getirilerek veya işleme bir segmentasyon hatası yayılarak bazı donanım işleyicilerindeki donanım istisnalarını işliyor , bkz. Sinyal (7) )
Sen olabilir yeşil konuları sistem ipler (ama yeşil iplik kütüphaneleri uygulamak ve hata ayıklama zor) üzerindedir. İçine bak goroutines kullanılan Go süslü örneğin. Ayrıca setcontext'e (3) bakınız .
Bazen, sisteminiz atmayı deneyebilir . Bu, toplam sanal bellek (tüm işlemlerin gerektirdiği) mevcut fiziksel RAM'i -büyük bir faktör- aştığında olur. Sonra bilgisayarınız yanıt vermiyor. Yerleşik küme boyutu , talep çağrısı , çalışma kümesi , aşırı bellek taahhüdü , ASLR hakkında bilgi edinin .
Linux- -için Ayrıca bkz çatal (2) , klon (2) , mmap'in (2) , madvise (2) , posix_fadvise (2) , mlock (2) , execve (2) , kimlik bilgileri (7) , Pthreads (7) , futex (7) , yetenekler (7) .