Zamanlama
1.805 iş parçacıkları aynı anda çalışmaz . Ticaret yapıyorlar. Bir çekirdek iş parçacığının bir kısmını çalıştırır, sonra başka bir iş parçacığının bir kısmını yürütmek için ayırır. Diğer çekirdekler de aynısını yapar. Yuvarlak ve yuvarlak, iplikler tek seferde değil, aynı anda biraz yürütülür.
İşletim sisteminin (Darwin ve macOS) en büyük sorumluluğu, hangi çekirdeğin hangi çekirdeğe ne kadar süreyle uygulanacağıdır.
Birçok iş parçacığının yapacak işi yoktur ve bu nedenle uykuda ve planlanmamış olarak kalır. Benzer şekilde, birçok iş parçacığı depolamadan alınacak veriler veya tamamlanacak bir ağ bağlantısı veya bir veritabanından yüklenecek veriler gibi bazı kaynaklarda bekliyor olabilir. Beklenen kaynağın durumunu kontrol etmekten başka hiçbir şey yapmadan, bu tür iş parçacıkları oldukça kısa bir süre için planlanır.
Uygulama programcısı, dış kaynak beklemesinin biraz zaman alacağını bildiğinde, iş parçacığını belirli bir süre uyuyarak bu zamanlama işlemine yardımcı olabilir. Ve harici kaynaklarda beklemek için hiçbir neden olmadan CPU-yoğun bir "sıkı" döngü çalıştırıyorsanız, programcı çekirdeği hog ve böylece diğer iş parçacıkları yürütmek için kısa bir kenara koymak için gönüllü bir çağrı ekleyebilirsiniz.
Daha fazla ayrıntı için, çoklu kullanım için Wikipedia sayfasına bakın .
Eşzamanlı Çoklu Diş Açma
Bağlantılı Sorunuza gelince , iş parçacıkları gerçekten de burada olduğu gibidir.
Bir sorun, işletim sistemi tarafından planlandığında iş parçacıkları arasında geçişin genel maliyeti vardır. Mevcut iş parçacığının talimatlarını ve verilerini çekirdekten kaldırmak ve bir sonraki programlanmış iş parçacığının talimatlarını ve verilerini yüklemek için önemli bir maliyet vardır. İşletim sisteminin işinin bir parçası, iş parçacığı maliyetini optimize etmek için iş parçacıklarını planlamakta akıllı olmaya çalışmaktır.
Bazı CPU üreticileri, bir çift iş parçacığı arasında geçişi çok daha hızlı hale getirmek için bu zamanı kesmek için teknoloji geliştirdi. Intel teknolojilerine Hyper-Threading adını verir . Genel olarak eşzamanlı çoklu iş parçacığı (SMT) olarak bilinir .
Diş çifti aslında eşzamanlı olarak yürütülmese de, anahtarlama o kadar düzgün ve hızlıdır ki, her iki diş de neredeyse aynı anda görünür. Bu, her çekirdeğin işletim sistemine bir çift sanal çekirdek olarak sunduğu kadar iyi çalışıyor. Böylece, örneğin dört fiziksel çekirdeğe sahip bir SMT etkin CPU, işletim sistemine sekiz çekirdekli bir CPU olarak sunulacaktır.
Bu optimizasyona rağmen, bu tür sanal çekirdekler arasında geçiş yapmak için hala bazı ek yükler var. Çok fazla CPU-yoğun iş parçacığı, bir çekirdek üzerinde programlanacak yürütme süresi için tüm yayılma sistemi, verimsiz hale getirebilir, hiç bir iş parçacığı fazla iş yapmaz. Dokuz çocuk arasında paylaşılan bir oyun alanındaki üç top gibi, hiç kimsenin bir topla gerçekten ciddi bir oyun zamanı almadığı dokuz yüz çocuk arasında paylaşım .
Bu nedenle, CPU ürün yazılımında, bir sysadmin'in SMT'yi devre dışı bırakmak için makineye bir anahtar atabileceği bir seçenek vardır, eğer kullanıcılarına olağandışı bir şekilde CPU'ya bağlı bir uygulamayı çalıştırmada çok az duraklama fırsatına sahip olacağına karar verir.
Böyle bir durumda orijinal Sorunuza geri dönüyoruz: Bu özel durumda, gerçekten bu hiper-aktif ipliklerden daha fazlasına sahip olmak için işlemleri fiziksel çekirdeklerden daha fazla kısıtlamak istersiniz. Ama tekrar edeyim: bu, özel bir bilimsel veri çatışması projesi gibi bir şeyde meydana gelebilecek, ancak neredeyse hiçbir zaman ortak iş / kurumsal / kurumsal senaryolar için geçerli olmayacak son derece sıra dışı bir durumdur.