क्या किसी को भी नए std::async
के साथ अनुभव है? वर्तमान में हम एक समांतर फ़ाइल पार्सर को कार्यान्वित कर रहे हैं, जो फ़ाइल खंड को पढ़ता है और इस खंड को एसिंक फ़ंक्शन में पास करता है।std :: async (std :: launch :: async) बनाम जीसीसी का व्यवहार बनाम क्लैंग का व्यवहार
क्लैंग (v3.0) का उपयोग करके इस तरह से डिफ़ॉल्ट std::async
नीतियों (कार्यान्वयन निर्भर) के साथ वास्तव में ठीक काम करता है। दो कोर मशीन पर, यह 4 धागे तक आग लगती है जो वास्तव में अच्छी तरह से काम करती है।
लेकिन जीसीसी (v4.7) के साथ, फ़ाइल रीडिंग थ्रेड किसी नए थ्रेड को नहीं बढ़ाता है, जिससे कार्यक्रम पूरी तरह अनुक्रमिक हो जाता है।
std::launch::async
का उपयोग करके, दोनों संस्करण काफी समान हैं (मामले क्या होना चाहिए)।
क्या किसी को भी जीसीसी की सी ++ 11 थ्रेडिंग क्षमताओं के वर्तमान स्थिति की स्थिति पता है? या यह हमारे कार्यान्वयन में एक त्रुटि हो सकती है?
लघु कोड:
while (readNewChunk()) {
Chunk &chunk = fileReader_.getChunk(); //reading the file
ChunkLoader *chunkLoader = new ChunkLoader();
auto ftr = std::async(std::launch::async, &ChunkLoader::createDictionaries, chunkLoader);
dictCreationFutures_.push_back(std::move(ftr));
}
मैं वास्तव में बूस्ट का उपयोग करने की सलाह दूंगा। यह उचित सी ++ 11 समर्थन के लिए एक बड़ी छलांग नहीं होगी। सी ++ 11 में नए थ्रेडिंग मॉडल को जीसीसी या एमएसवीसी का उपयोग कर एक अलग मेमोरी लेआउट की आवश्यकता होती है, और वे वास्तव में बहुत कुछ लागू नहीं किए जाते हैं। –