SORU
16 Ocak 2013, ÇARŞAMBA


Zaman uyumsuz (:: başlatmak zaman uyumsuz) pahalı bir iş parçacığı havuzu iş parçacığı oluşturma kaçınmak için eski C 11?

Gevşek bu soru ile ilgilidir: Are std::thread pooled in C 11?. Soru farklı olsa da, amaç aynı:

Soru 1: hala anlam (ya da 3. parti kitaplığı) kendi iş parçacığı havuzları pahalı bir iş parçacığı oluşturma önlemek için kullanmak mümkün olur Mu?

Diğer soruda sonuç std::thread (olabilir veya olmayabilir) havuza için bağımlı olamaz. Ancak, std::async(launch::async) çok daha yüksek bir havuza olma şansı var gibi görünüyor.

Standart tarafından zorunlu olduğunu değil, ama tüm iyi C 11 uygulamaları bu beklenirdi IMHO iş parçacığı iş parçacığı oluşturma yavaşsa havuzu kullanmak istiyorsunuz. Sadece yeni bir iş parçacığı oluşturmak için ucuz olduğu platformlarda, her zaman yeni bir iş parçacığı spawn bu beklenirdi.

Soru 2: Bu, tam da düşündüğüm gibi, ama bunu kanıtlayacak hiçbir gerçekler var. Çok iyi yanlış olabilir. Eğitimli bir tahmin mi?

Son olarak, burada ilk iş parçacığı oluşturma async(launch::async) ile ifade edilebilir sanırım nasıl gösteren örnek bir kod hazırladım:

Örnek 1:

 thread t([]{ f(); });
 // ...
 t.join();

olur

 auto future = async(launch::async, []{ f(); });
 // ...
 future.wait();

Örnek 2: iplik Ateşi unutun

 thread([]{ f(); }).detach();

olur

 // a bit clumsy...
 auto dummy = async(launch::async, []{ f(); });

 // ... but I hope soon it can be simplified to
 async(launch::async, []{ f(); });

Questin 3: thread sürümleri için async sürümleri tercih edersiniz?


Gerisi artık açıklığa kavuşması için soru, ama sadece bir parçasıdır

Neden dönüş değeri boş bir değişkene atanması gerekir?

Ne yazık ki, geçerli C 11 standart değer, eylem sona kadar olan bloklar çalıştırılır dönüş yakalayan zorlar. Bazı standart bir hata olarak kabul edilir (Herb Sutter örneğin,).

cppreference.com Bu örnek de güzel gösterir:

{
  std::async(std::launch::async, []{ f(); });
  std::async(std::launch::async, []{ g(); });  // does not run until f() completes
}

Başka bir açıklama:

Biliyorumiş parçacığı havuzu diğer legimate kullanır olabilir ama bu soru sadece pahalı bir iş parçacığı oluşturma masraflarının yönü ilginç duyuyorum.

Hala iş parçacığı havuzu özellikle kaynakları üzerinde daha fazla kontrol gerekiyorsa çok yararlı olduğu durumlar vardır bence. Örneğin, bir sunucu istekleri sadece belirli sayıda hızlı yanıt süreleri garanti simulatenously işlemek ve bellek kullanımı tahmin edilebilirliğini artırmaya karar verebilir. İş parçacığı havuzu güzel, burada olmalı.

İş parçacığı yerel değişkenleri de kendi iş parçacığı havuzu için bir argüman olabilir, ama pratikte revelant olup olmadığından emin değilim:

  • std::thread ile yeni bir iş parçacığı oluşturma iş parçacığı yerel değişkenleri başlatıldı olmadan başlar. Belki de istediğin bu değil.
  • Konuları async tarafından oluşturulan iş parçacığı yeniden olabilirdi çünkü benim için biraz belirsiz. Anladığım kadarıyla, iş parçacığı yerel değişkenleri resetted olmasını garanti edilmez, ama yanılıyor olabilirim.
  • (Sabit boyutlu) kendi iş parçacığı havuzları kullanarak, diğer yandan, eğer gerçekten ihtiyacınız varsa, size tam kontrol sağlar.

CEVAP
16 Ocak 2013, ÇARŞAMBA


Soru 1:

Linux iş parçacığı oluşturma çok daha yapıldığını biliyorum. Ve bu yüzden Linux iş parçacığı oluşturma maliyetleri önlemek için iş parçacığı havuzu için fazla bir sebep yok.

Ben de standart kütüphane iş parçacığı oluşturma oldukça şeffaf yapmak gerçekten çok bu hesaplama etkilediğini sanmıyorum. Sadece yapar '' bir iş parçacığı başlatmak için daha hızlı ve daha kolay gibi. C OS üzerinde daha fazla bağlıdır . IMHO, İşletim sistemleri mümkün olduğunca ucuz iş parçacığı oluşturma yapmak gerekir bir sürü nedeni var. Döngüler otomatik paralellik sadece bir örnek.

Soru 2:

Evet, temelde bu 'örtülü' bir konu. başlattı Ama gerçekten, neler oluyor hala oldukça açık. Gerçekten kelime örtülü olarak özellikle iyi bir kelime olduğunu sanmıyorum.

Soru 3:

Kişisel olarak, iş parçacığı başlatır açık olmayı severim. Seri erişim garanti nerede adalarda değer bir sürü yer. Aksi takdirde her zaman bir dışlama bir yerde etrafına sararak ve bunu kullanmak için hatırlamak o kadar değişken devlet ile sonuçlanıyor.

Çalışma sırası modeli çok daha iyi 'gelecek' seri Adaları 'daha etkili bir değişken devlet işleyebilir ortalıkta. çünkü modeli daha çok sevmiştim

Ama gerçekten, tam olarak ne yaptığınızı bağlıdır.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Chip Johnson

    Chip Johnson

    30 AĞUSTOS 2007
  • eyes4beautee

    eyes4beautee

    17 HAZİRAN 2011
  • Subscribe!!

    Subscribe!!

    3 EKİM 2009