std :: async, std :: launch ilkesini ilk argüman olarak alan bir aşırı yüklenmeye sahip. Bu aşırı yükü ne zaman kullanmalıyım? Farklı politikalar nelerdir? (Senkronizasyon ve uyumsuzluğun iki seçenek olduğunu düşünüyorum). Senkronizasyon politikasını ne zaman kullanmalıyım? Bu, doğrudan onu çalıştırmaktan nasıl farklıdır?std :: async'i eşitleme ile ilke olarak ne zaman kullanmalıyım?
cevap
the very helpful article that Jagannath linked özeti ve olası kullanımlar hakkındaki yorumlar.
any
:3 fırlatma politikaları vardır kütüphane bir iş parçacığı a yumurtlamaya veya verilip seçtiği değil
async
: Bir iplikdeferred
çatallanabilir için açıkça soruyorum: Size açıkça bir iş parçacığı
için değil sormak,nedenle
çatallanabilir içinpolitikası, deterministik tembel değerlendirmenin (çağrıya ihtiyaç olarak da bilinir) alınmasının bir yoludur. Örneğin, sahip olduğunu varsayalım:
void MyClass::lazy(std::future<int> const& f) {
if (this->notReady()) { return; }
if (this->stillNotReady()) { return; }
if (this->value() == 42) { return; }
this->go(f.get());
}
Şimdi, bu tamsayı değeri hesaplama ise uzun, o zaman bunu hesaplamak için biraz ziyan (örneğin, bir ağ gidiş dönüş çağırmak olabilir) tüm gerçekten gerektirmeyen durumlar ... ve şimdi bunu yapacak bir araç var! hesaplama sonraki çağrılar hep olsun aynı sonuç için garanti, ilk ve son kez için yapılır çünkü bu, bir std::function<int()>
(ve bir kapatma) kullanmaktan ustaca farklı olduğunu
void func(MyClass& mc) {
std::future<int> f = std::async(std::launch::deferred, []() {
return stoi(memcached.get("KEY"));
});
mc.lazy(f);
}
Not.
Diğer ilkelerle arasındaki fark, değerine gerek duymadığınız zaman işlemin gerçekleştirilip gerçekleştirilmediğine de ifade edilebilir.
any
: gerçekleştirilmez
: Başka bir iş parçacığı
deferred
tarihinde yapılacaktır: (proaktif) ya da hepsi değilasync
gerçekleştirilir başka bir iş parçacığı üzerinde gerçekleştirilen olabilir Bu nedenle, deferred
size daha iyi kontrol sağlar, bu da aramanın bir yan etkisinin bulunması durumunda önemlidir."eşitleme" işlevi Aslında std :: launch :: deferred' – Cubbi
@Cubbi: İşaretlediğiniz için teşekkürler, Standart ile çapraz kontrol etmeliydim. –
“get()' ifadesi “geleceği” geçersiz kıldığından, “get()' ”çağrısının sonraki çağrıları tanımsız davranışı çağırır. Geçersizlikten kaçınmak için bir 'shared_future 'gerekir. –
- 1. std :: bind ne zaman kullanmalıyım?
- 2. _aligned_malloc() işlevini ne zaman kullanmalıyım?
- 3. PHP: memory_get_peak_usage (false), ne zaman kullanmalıyım?
- 4. Linux'ta dosya açtığımda O_CLOEXEC'i ne zaman kullanmalıyım?
- 5. JavaScript'te MVC framework'ü ne zaman kullanmalıyım?
- 6. SPATIAL INDEX nedir ve ne zaman kullanmalıyım?
- 7. Genel/özel/statik yöntemleri ne zaman kullanmalıyım?
- 8. @JoinColumn'u veya @JoinTable'ı Ne Zaman Kullanmalıyım?
- 9. es6 Ok İşlevlerinde ne zaman 'return' kullanmalıyım?
- 10. Kalıtım yerine şablonları ne zaman kullanmalıyım?
- 11. django - media_root veya static_root'u ne zaman kullanmalıyım?
- 12. WCF hizmetinin içinde OperationContextScope'u ne zaman kullanmalıyım?
- 13. Ne zaman Response.Redirect kullanmalıyım (url, true)?
- 14. Django'da user.get_profile öğesini ne zaman kullanmalıyım?
- 15. RequestStack ne zaman getCurrentRequest yerine getMasterRequest kullanmalıyım?
- 16. DateTime vs date ne zaman, ruby / raylarda zaman alanlarını kullanmalıyım?
- 17. Oturum yerine ne kullanmalıyım?
- 18. std :: decay nedir ve ne zaman kullanılmalıdır?
- 19. QT projeleri ile ne kullanmalıyım? (QT Creator)
- 20. npm'yi "-g" bayrağıyla ne zaman kullanmalıyım ve neden?
- 21. Jira Agile'de bir "Story" kullanmalıyım ve ne zaman bir "Geliştirme" kullanmalıyım?
- 22. Python'da tip denetimi (hiç yapılmışsa) ne zaman kullanmalıyım?
- 23. Docker kapsayıcısında `--interactive '' --tty 'kullanılmadan ne zaman kullanmalıyım?
- 24. sscanf yerine ne kullanmalıyım?
- 25. com.google.appengine.repackaged * yerine ne kullanmalıyım?
- 26. ByteBuf.retain() öğesini bir Netty4 Encoder'da ne zaman kullanmalıyım?
- 27. Scala @ inline açıklamasını ne zaman kullanmalıyım (ve yapmamalıyım)?
- 28. Objective-C yöntem adlarında "ve" ne zaman kullanmalıyım?
- 29. Web Görevinin aksine bir Mantık Uygulamasını ne zaman kullanmalıyım?
- 30. Django modelleri: öznitelikler için @property dekolayıcısını ne zaman kullanmalıyım?
http://www.justsoftwaresolutions.co.uk/threading/multithreading-in-c++0x-part-8-futures-and-promises.html ---> Bu yararlı olabilir – Jagannath