मुझे एक इंटरैक्टिव एप्लिकेशन में सीपीयू-भारी मल्टीटास्कबल नौकरियों का प्रबंधन करने की आवश्यकता है। पृष्ठभूमि के रूप में, मेरा विशिष्ट अनुप्रयोग एक इंजीनियरिंग डिजाइन इंटरफ़ेस है। चूंकि उपयोगकर्ता किसी मॉडल के लिए अलग-अलग पैरामीटर और विकल्पों को बदलता है, पृष्ठभूमि में एकाधिक सिमुलेशन चलाए जाते हैं और परिणाम पूर्ण होने पर प्रदर्शित होते हैं, भले ही उपयोगकर्ता अभी भी मानों को संपादित कर रहा हो। चूंकि एकाधिक सिमुलेशन परिवर्तनीय समय लेते हैं (कुछ मिलीसेकंड हैं, कुछ 5 सेकंड लेते हैं, कुछ 10 मिनट लेते हैं), यह मूल रूप से जितनी जल्दी हो सके प्रतिक्रिया प्रदर्शित करने का विषय है, लेकिन अक्सर पहले शुरू की गई नौकरियों को निरस्त करना लेकिन अब इसकी आवश्यकता नहीं है उपयोगकर्ता के परिवर्तनों से पहले ही उन्हें अमान्य कर दिया गया है। अलग-अलग उपयोगकर्ता परिवर्तन अलग-अलग कंप्यूटेशंस को अमान्य कर सकते हैं ताकि किसी भी समय मेरे पास 10 अलग-अलग सिमुलेशन चल रहे हों। Somesimulations में कई हिस्सों हैं जिन पर निर्भरता है (सिमुलेशन ए और बी को अलग-अलग गणना की जा सकती है, लेकिन मुझे बीज सिमुलेशन सी के लिए अपने परिणामों की आवश्यकता है इसलिए मुझे ए और बी दोनों को सी शुरू करने से पहले पूरा करने की प्रतीक्षा करनी है।)मल्टीथ्रेडेड जॉब कतार प्रबंधक
मुझे लगता है बहुत आश्वस्त है कि इस तरह के आवेदन को संभालने के लिए कोड-स्तरीय विधि किसी प्रकार की बहुप्रचारित नौकरी कतार है। इसमें निष्पादन के लिए नौकरियां जमा करने, कार्य प्राथमिकताओं को निर्धारित करने, नौकरियों को समाप्त करने की प्रतीक्षा करने, निर्भरताओं को निर्दिष्ट करने, इस नौकरी को करने के लिए, लेकिन केवल नौकरी एक्स और नौकरी वाई समाप्त होने के बाद), कुछ मानदंडों के अनुरूप नौकरियों के सबसेट को रद्द करना, पूछताछ करना शामिल है नौकरियां बनी रहती हैं, कार्यकर्ता थ्रेड की गणना और प्राथमिकताओं को स्थापित करती हैं, और इसी तरह। और मल्टीप्लार्टर समर्थन भी बहुत उपयोगी है।
ये सॉफ़्टवेयर में नए विचार या इच्छा नहीं हैं, लेकिन मैं अपने आवेदन के शुरुआती डिजाइन चरण में हूं जहां मुझे इस तरह के कार्यों के प्रबंधन के लिए लाइब्रेरी का उपयोग करने के बारे में कोई विकल्प बनाना है। मैंने सी में अपने स्वयं के क्रूड थ्रेड प्रबंधकों को सी में लिखा है (मुझे लगता है कि यह पारित होने का संस्कार है) लेकिन मैं अपने काम को आधार देने के लिए आधुनिक उपकरण का उपयोग करना चाहता हूं, न कि अपने पिछले हैक्स।
पहला विचार OpenMP पर चलना है, लेकिन मुझे यकीन नहीं है कि यह वही है जो मैं चाहता हूं। ओपनएमपी ठीक स्तर पर समानांतरता के लिए बहुत अच्छा है, स्वचालित रूप से अनलॉकिंग लूप और ऐसे। मल्टीप्लाफ्फ़्ट के दौरान, यह #pragmas के साथ आपके कोड पर भी हमला करता है। लेकिन ज्यादातर इसे बड़े कार्यों के प्रबंधन के लिए डिज़ाइन नहीं किया गया है .. विशेष रूप से लंबित नौकरियों को रद्द करना या निर्भरताओं को निर्दिष्ट करना। संभव है, हाँ, लेकिन यह सुरुचिपूर्ण नहीं है।
मैंने देखा कि Google Chrome uses such a job manager for even the most trivial tasks. डिज़ाइन लक्ष्य उपयोगकर्ता इंटरैक्शन थ्रेड को जितना संभव हो उतना हल्का और नुकीला रखने के लिए प्रतीत होता है, इसलिए जो कुछ भी अतुल्यकालिक रूप से उत्पन्न हो सकता है, होना चाहिए। क्रोम स्रोत को देखने से यह एक सामान्य पुस्तकालय प्रतीत नहीं होता है, लेकिन यह देखना दिलचस्प है कि डिज़ाइन एसिंक्रोनस लॉन्च का उपयोग कैसे करता है ताकि बातचीत को तेजी से रखा जा सके। यह वही है जो मैं कर रहा हूं।
Surge.Act: नौकरियों को परिभाषित करने के लिए एक बूस्ट की तरह पुस्तकालय:
वहाँ एक अभी भी अन्य विकल्प हैं। यह ओपनएमपी पर बनाता है, लेकिन निर्भरता की श्रृंखला को अनुमति देता है जो अच्छा है। ऐसा लगता है कि ऐसा कोई प्रबंधक नहीं है जिसकी पूछताछ की जा सकती है, नौकरियां रद्द की गई हैं, आदि। यह एक पुरानी परियोजना है इसलिए इस पर निर्भर रहने के लिए डरावना है।
Job Queue जो मैं सोच रहा हूं उसके करीब है, लेकिन यह एक 5 साल का लेख है, समर्थित पुस्तकालय नहीं है।
Boost.threads में अच्छा प्लेटफार्म स्वतंत्र सिंक्रनाइज़ेशन है लेकिन यह नौकरी प्रबंधक नहीं है। POCO में कार्य लॉन्च करने के लिए बहुत साफ डिज़ाइन हैं, लेकिन फिर से चेनिंग कार्यों के लिए पूर्ण प्रबंधक नहीं हैं। (शायद मैं पीओसीओ को कम करके आंका रहा हूं)।
तो विकल्प उपलब्ध होने पर, मैं संतुष्ट नहीं हूं और मुझे फिर से अपनी लाइब्रेरी रोल करने का आग्रह महसूस होता है। लेकिन मैं कुछ ऐसा उपयोग करना चाहता हूं जो अस्तित्व में है।खोज के बाद भी (यहां एसओ और नेट पर) मुझे कुछ भी सही नहीं लगता है, हालांकि मुझे लगता है कि यह एक तरह का टूल होना चाहिए जिसकी अक्सर आवश्यकता होती है, इसलिए निश्चित रूप से कुछ समुदाय पुस्तकालय या कम से कम आम डिजाइन है। SO पर कुछ posts लगभग job queues हैं, लेकिन कुछ भी ऐसा लगता है जो फिट नहीं लगता है।
मेरी पोस्ट यहां आपको सभी मौजूदा उपकरणों से पूछने के लिए है, और/या आपने अपनी खुद की बहु-कार्यरत नौकरी कतार कैसे बनाई है।
बहुत बढ़िया। बढ़ावा :: भविष्य में पीओसीओ के सक्रिय रिजल्ट्स के समान दिखता है (http://pocoproject.org/poco/docs/Poco.ActiveResult.html)। फिर यह एक कार्य कतार प्रबंधक नहीं है, लेकिन फिर भी एक महान उपकरण है। बूस्ट: थ्रेड का आधार कस्टम प्रबंधक बनाने के लिए सबसे कम निम्न स्तर टूलकिट की तरह महसूस करता है। –