2014-04-21 8 views
6

मैं एसिंक्रोनस कोड चलाने के लिए दो विकल्पों पर विचार कर रहा हूं: Qt Concurrent और std::async। यह देखते हुए कि मैं क्यूटी के साथ एक जीयूआई ऐप लिख रहा हूं, क्यूटी समवर्ती के साथ जाने का अर्थ है। हालांकि std::async भी सभी प्रमुख कंपाइलरों द्वारा अच्छा और समर्थित लगता है।क्यूटी समवर्ती या std :: async नए कोड के लिए?

क्या मुझे नए कोड के लिए क्यूटी समवर्ती या std::async का उपयोग करना चाहिए? दोनों की तुलना करते समय मुझे और क्या देखना चाहिए?

+0

कृपया दो प्रश्नों को एक स्टैक ओवरफ्लो प्रश्न के रूप में बताएं। –

उत्तर

6

यह देखते हुए कि मैं क्यूटी के साथ एक जीयूआई अनुप्रयोग लिख रहा हूँ, यह क्यूटी समवर्ती साथ जाने के लिए

मैं कहूंगा कि समझ में आता है, यह इतना आसान नहीं है। मैं व्यक्तिगत पुस्तकालय का जितना संभव हो उतना उपयोग करूँगा। हालांकि, ध्यान में रखना बाधाएं हैं:

क्या आपको कम से कम C++ 11 का समर्थन नहीं करने वाले प्लेटफ़ॉर्म पर अपने सॉफ़्टवेयर का समर्थन करने की आवश्यकता है?

यदि प्रश्न हाँ है, तो क्यूटी समाधान का उपयोग क्यूटी आधारित सॉफ्टवेयर में एक बेहतर विकल्प है। कहा जा रहा है, इसके लिए भी, आप अपनी जरूरत के हिसाब से अलग क्यूटी समाधान कर सकते हैं। एक, केडीई से धागा बुनकर

एक और सवाल है, लेकिन हमें लगता है कि अब तक अब के लिए नहीं जाने दिया ... कि आप अपने आप से पूछ सकता है:

आप पहले से ही एक मौजूदा कोड बेस जहां कि है पूरे प्रयोग किया जाता है?

उत्तर के आधार पर, यह निर्णय के लिए आगे पहलू भी प्रदान कर सकता है, चाहे आप स्थिरता पसंद करते हैं या आगे सोचते हैं।

वहाँ भी यहाँ एक और सवाल पूछा जाना जाता है: मैं की जरूरत है

QtConcurrent का कितना करते हैं?

सटीक उत्तर के आधार पर, यह एक बेहतर विकल्प हो सकता है या नहीं भी हो सकता है। ध्यान दें कि QtConcurrent की प्रत्येक कार्यक्षमता मानक लाइब्रेरी में अभी तक नहीं है, उदाहरण के लिए QFutureWatcher जैसे कि क्यूटी सिग्नल-स्लॉट तंत्र के साथ।

तो, हाँ, एक क्यूटी उपयोगकर्ता के रूप में, मैं जितना संभव हो सके मानक पुस्तकालय का उपयोग करने का सुझाव दूंगा। इन दिनों, क्यूटी भी स्पष्ट रूप से उन पर निर्भर करता है, इसलिए मंच पर नहीं चलेंगे जो इसका समर्थन नहीं कर रहा है। साथ ही, सामान्य दिशा में यह क्यूटी परियोजना में उचित लगता है। उदाहरण के लिए, QtAlgorithms में बहुत सी चीजें अप्रचलित हो गईं, लेकिन यह उनमें से एक है।

2

क्यूटी समवर्ती आपको QtConcurrent::run() का उपयोग करके किसी अन्य थ्रेड में फ़ंक्शन चलाने देता है। तो मुझे लगता है कि आप केवल QtConcurrent::run() की तुलना std::async से कर सकते हैं।

क्यूटी समवर्ती इतनी परिष्कृत है और इसमें कई उपयोगी विशेषताएं हैं। इसमें समांतर सूची प्रसंस्करण के लिए एपीआई शामिल हैं और आपको मल्टीएक्स या सेमफोरस जैसे निम्न-स्तरीय थ्रेडिंग प्राइमेटिव्स का उपयोग किए बिना बहु-थ्रेडेड प्रोग्राम बनाने की सुविधा मिलती है। यह प्रसंस्करण कोर की संख्या के अनुसार उपयोग किए गए धागे की संख्या को भी समायोजित करता है।

मुझे लगता है कि क्यूटी कंसूरेंट का उपयोग करना उच्च स्तरीय एपीआई और उपयोग में आसानी के कारण बहुत अच्छा है।

+2

ओपी क्यूफ्यूचर की तुलना std :: भविष्य के साथ की तुलना कर सकती है, और शेष std :: वादे, std :: packaged_task, shared_future, आदि के साथ। इनमें से कोई भी कम-स्तरीय थ्रेडिंग प्राइमेटिव्स को अपने आप को म्यूटेक्स और सेमफोर की आवश्यकता नहीं होगी। – lpapp

+0

@Ipapp वास्तव में। QtConcurrent भी डेवलपर्स द्वारा खुद को अनजान होने के रूप में मान्यता प्राप्त है। पिछली बार मैंने चेक किया था, वे केडीई की थ्रेडवेवर लाइब्रेरी में लेने पर विचार कर रहे थे जो एक क्रॉस-प्लेटफ़ॉर्म कार्य आधारित समवर्ती पुस्तकालय है और इसके लिए लिखना बहुत आसान है। वे एक और पुस्तकालय लिखने पर भी विचार कर रहे थे जो एसडीडी लाइब्रेरी को प्रभावित करेगा और शायद इसे मानक में लाएगा। –

संबंधित मुद्दे