- Bu makale, Rust topluluğunda çok iş parçacıklı yürütücülerin kullanımına dair tartışmayı ele alıyor; bunlar, işleri dengeli biçimde dağıtmak için work-stealing yapan async çalışma zamanlarıdır.
- Bazı Rust kullanıcıları, daha yüksek performans ve daha kolay uygulama vaat eden alternatif bir mimari olarak "thread-per-core" yaklaşımını savunuyor.
- "Thread-per-core" terimi yanıltıcı olabilir. Tüm çok iş parçacıklı yürütücüler aslında thread-per-core'dur; çekirdek başına bir OS iş parçacığı oluşturur ve işleri bu iş parçacıkları üzerinde zamanlar.
- Thread-per-core üç fikri birleştirir: eşzamanlılığın kullanıcı alanında ele alınması, iş parçacıklarının bloklanmasını önlemek için I/O'nun asenkron hale getirilmesi ve senkronizasyon maliyetini ile CPU önbellekleri arasındaki veri hareketini ortadan kaldırmak için verinin CPU çekirdekleri arasında bölünmesi.
- Tartışma esas olarak üçüncü nokta üzerinedir ve async Rust kullanımı ilk iki gereksinimi karşılayabilir.
- Thread-per-core mimarisinde iki optimizasyon yapılabilir: işlerin iş parçacıkları arasında çalınması ve mümkün olduğunca az durumun paylaşılması.
- Work-stealing, tüm iş parçacıklarının sürekli iş yapabilmesini sağlayarak tail latency'yi iyileştirir; ancak uygulanması zordur ve senkronizasyon maliyetiyle önbellek kaçırmalarına yol açabilir.
- Share-nothing, veriyi tek bir CPU çekirdeğine ait daha hızlı önbellekte tutarak tail latency'yi iyileştirir; ancak birden fazla bölümde durum değiştirmesi gereken karmaşık uygulamalar için uygulanması zor olabilir.
- Makale, paylaşılan durum kullanan sistemlerde work-stealing'in yük altında CPU kullanımını iyileştirebileceğini öne sürüyor.
1 yorum
Hacker News görüşü
executor'ları değil, Rust'taasync/await'in iyi bir soyutlama olup olmadığıdır.asyncprogramlamasına yönelik eleştiriler vardır; bunlar arasındaSend + Sync + 'staticgereksinimi de bulunur ve bazıları bunu külfetli bulur.Sendbound'u, işlerinexecutorthread'leri arasında taşınmasına izin veren bir gereksinimdir ve bu, Rustasyncsisteminin bir kusuru gibi görünür.asynckullanımı birçok Rust programı için erken optimizasyon olarak görülür.Send,Syncve'staticgibi ek geliştirici kısıtlarına yol açar.