मैं समझता हूं कि std::async
निम्न पैरामीटर के साथ क्या करता है।std :: async - std :: launch :: async | std :: launch :: deferred
std::launch::async
std::launch::deferred
हालांकि क्या साथ, std::launch::async | std::launch::deferred
क्या होता है?
मैं समझता हूं कि std::async
निम्न पैरामीटर के साथ क्या करता है।std :: async - std :: launch :: async | std :: launch :: deferred
std::launch::async
std::launch::deferred
हालांकि क्या साथ, std::launch::async | std::launch::deferred
क्या होता है?
std::launch::async | std::launch::deferred
की लॉन्च नीति का अर्थ है कि कार्यान्वयन यह चुन सकता है कि std::launch::async
या std::launch::deferred
की नीति लागू करना है या नहीं। यह विकल्प कॉल से कॉल में भिन्न हो सकता है, और तुरंत निर्णय नहीं लिया जा सकता है।
एक कार्यान्वयन जो हमेशा एक या दूसरे को चुनता है वह कानूनी है (जो जीसीसी करता है, हमेशा स्थगित चुनता है), जैसा कि std::launch::async
चुनता है जब तक कि कुछ सीमा तक नहीं पहुंच जाती है, और फिर std::launch::deferred
पर स्विच हो जाती है।
इसका यह भी अर्थ है कि कार्यान्वयन बाद में पसंद को रोक सकता है। इसका अर्थ यह है कि कार्यान्वयन तब तक निर्णय लेने के लिए इंतजार कर सकता है जब तक कि उसके हाथ को उस कॉल द्वारा मजबूर नहीं किया जाता है, जिसमें स्थगित और एसिंक कार्यों से स्पष्ट रूप से अलग प्रभाव पड़ते हैं, या जब तक चलने वाले कार्यों की संख्या आंतरिक कार्य सीमा से कम न हो। यह just::thread करता है।
कार्यों कि निर्णय के लिए मजबूर कर रहे हैं: wait()
, get()
, wait_for()
, wait_until()
, और पिछले भविष्य वस्तु परिणाम को संदर्भित करने का नाशक।
Chaprer आईएसओ आईईसी 14,882-2011 की 30.6.8 बताते हैं कि इसका मतलब है launch::async | launch::deferred
implementations should defer invocation or the selection of the policy when no more concurrency can be effectively exploited
(समान policy
रूप async
बिना पैरामीटर)।
प्रैक्टिस में इसका मतलब यह है कि सी ++ रनटाइम प्रत्येक async
के लिए नए थ्रेड शुरू कर देना चाहिए जब तक अप्रयुक्त CPU कोर न हों।
हाँ मैंने देखा, लेकिन अभ्यास में इसका क्या अर्थ है? – ronag
फॉलोग उद्धरण मिला जो इसे मेरे लिए स्पष्ट बनाता है: "यह कार्यान्वयन पर निर्भर है कि अतुल्यकालिक निष्पादन या आलसी मूल्यांकन करना है या नहीं।" – ronag
ऑफटॉपिक: लेकिन स्थगित लॉन्च के साथ क्या होता है जब '.get()' कभी नहीं कहा जाता है और भविष्य को आसानी से नष्ट कर दिया जाता है? – ronag
क्या, जीसीसी हमेशा 'स्थगित' का उपयोग करता है? अच्छा, "कार्यान्वयन को यह तय करने दें कि आपके लिए सबसे अच्छा क्या है";) –