यदि मैं मल्टी-थ्रेडिंग का उपयोग कर रहा हूं तो मैं कैसे बता सकता हूं?


15

वर्तमान में मुझे ऐसा लग रहा है कि मैं मल्टी-थ्रेडिंग का उपयोग कर रहा हूं।

मेरे पास 3 प्रकार के डेटा हैं, ए, बी और सी।

प्रत्येक Aको कई Bएस में परिवर्तित किया जा सकता है और प्रत्येक Bको कई Cएस में परिवर्तित किया जा सकता है ।

मुझे केवल Cएस के इलाज में दिलचस्पी है ।

मैं कुछ रूपांतरण कार्यों के साथ इसे आसानी से लिख सकता हूं। लेकिन मैं अपने आप को, धागे के साथ इसे लागू करने के लिए तीन कतारों (पकड़ा queue_a, queue_bऔर queue_c)। अलग-अलग रूपांतरण करने वाले दो सूत्र हैं, और एक कार्यकर्ता:

  • ConverterAसे पढ़ता है queue_aऔर लिखता हैqueue_b
  • ConverterBसे पढ़ता है queue_bऔर लिखता हैqueue_c
  • Worker से प्रत्येक तत्व को संभालता है queue_c

रूपांतरण काफी सांसारिक हैं, और मुझे नहीं पता कि क्या यह मॉडल बहुत जटिल है। लेकिन यह मुझे बहुत मजबूत लगता है। प्रत्येक "कन्वर्टर" डेटा को कतारों में आने से पहले ही काम करना शुरू कर सकता है, और कोड में किसी भी समय मैं नए Aएस या Bएस को सिर्फ "सबमिट" कर सकता हूं और यह रूपांतरण पाइपलाइन को ट्रिगर करेगा जो कि कार्यकर्ता द्वारा नौकरी को ट्रिगर करेगा थ्रेड।

यहां तक ​​कि परिणामी कोड सरल दिखता है। लेकिन मैं अभी भी अनिश्चित हूं अगर मैं कुछ सरल के लिए धागे का दुरुपयोग कर रहा हूं।


5
मुझे लगता है कि पीछा करने के लिए इस सवाल को थोड़ा छोटा करने की जरूरत है। शीर्षक भी भ्रामक है - ऐसा लगता है कि आप एक शेख़ी में लॉन्च करने वाले हैं (भले ही आप नहीं हैं)। हो सकता है कि आप किसी से कुछ पूछ रहे हों, "अगर मैं मल्टीथ्रेडिंग का उपयोग कर रहा हूं तो मैं कैसे बता सकता हूं?"
KChaloux

@ केचलौ मैं सहमत हूँ। मैंने इसे संपादित किया है, और आशा है कि यह मेरे विचारों को थोड़ा और बेहतर बनाएगा।
14

4
@exhuma बहुत बढ़िया। आपका -1
KChaloux

3
@KChaloux ... लू के लिए एक अंतर आपके विचार-प्रक्रिया को बना सकता है ... :)
प्रातः काल ६'१३

यह ऑनलाइन पीडीएफ पुस्तक, परिपक्व अनुकूलन हैंडबुक (अभी प्रकाशित दिन पहले) व्यवस्थित प्रभावों के बारे में बात करती है जिसमें समग्र सिस्टम प्रदर्शन पर एक मॉड्यूल का प्रभाव कभी-कभी मॉड्यूल के निष्पादन समय के अंश से अधिक हो सकता है ।
रवांग

जवाबों:


17

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

यदि आप उन्हें उपयोग करने में अधिक सहज महसूस करते हैं, तो आपके लिए अधिक शक्ति। हालांकि, यह जान लें कि यदि धागे अड़चनों को खत्म करके गति को बढ़ावा नहीं देते हैं, तो वे निश्चित रूप से आपके कार्यक्रम को धीमा कर रहे हैं।

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

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

तो क्या आपको वैसे भी धागे का उपयोग करना चाहिए? ठीक है, थ्रेड्स का एक स्वस्थ ज्ञान निश्चित रूप से एक बुरी चीज नहीं है, खासकर यदि आप इसमें अच्छे हो जाते हैं। हालांकि, देर से आंदोलन नोड-जेएस जैसी एकल-थ्रेडेड भाषाओं की ओर रहा है एकल धागा होने के मुख्य लाभों में से एक यह है कि इसे स्केल करना आसान है और कुछ अनुकूलन किए जा सकते हैं यदि आप जानते हैं कि निर्देशों को क्रमिक रूप से चलाने की उम्मीद है (भले ही अनुकूलन का मतलब हो सकता है कि निर्देश जो समानांतर में चलाए जा सकते हैं अतुल्यकालिक रूप से चलाया जाए)।

उन्होंने कहा, मैं कहता हूं कि आपके लिए सबसे ज्यादा आरामदायक है। मेरे अनुभव में, एक प्रोग्राम लिखना जो आपको समझ में आता है, उसे तेजी से काम करने की तुलना में अधिक प्राथमिकता है। बस थ्रेड्स का उपयोग करना सुनिश्चित करें जब आपको लगता है कि यह आपको प्रोग्राम लिखने में मदद करता है, और इसलिए नहीं कि आप इसे तेजी से काम करना चाहते हैं, क्योंकि आपको प्रदर्शन के बारे में इतनी चिंता नहीं होनी चाहिए क्योंकि आप प्रोग्राम लिख रहे हैं (अनुकूलन महत्वपूर्ण है, लेकिन यह इंतजार भी कर सकते हैं)।


आप दिलचस्प बिंदु बना रहे हैं। मेरे मामले में, रूपांतरण पाइपलाइन यह प्रदर्शन के बारे में नहीं है। यह कोड सादगी / पठनीयता के बारे में है। कार्यकर्ता धागा है प्रदर्शन के बारे में। प्रत्येक अंतिम कार्य एक रिमोट मशीन पर चलता है, और कई काम सबमिट करने से यह काफी तेजी से चलता है।
14

2
@exhuma कई थ्रेड्स के माध्यम से समानांतर निष्पादन के अलावा, आप फ्यूचर्स / प्रॉमिस, या कॉलबैक-उन्मुख शैली जैसी एसिंक्स तकनीकों का भी उपयोग कर सकते हैं। ध्यान दें कि आप पुनरावृत्तियों / स्ट्रीम का उपयोग करके पाइपलाइनों को मॉडल कर सकते हैं; वास्तव में थ्रेड्स का उपयोग करने की कोई आवश्यकता नहीं है - यदि आप कई सीपीयू का उपयोग करना चाहते हैं (नेटवर्किंग कोड में, यह लगभग कभी भी नहीं होता है)
amon

@exhuma हाँ, थ्रेड सामान्य रूप से प्रदर्शन में मदद करते हैं। मेरा कहना था कि यदि आप इसे नहीं कर रहे हैं क्योंकि यह बहुत धीमा है, तो आपको इसे करना चाहिए क्योंकि यह आपको अपना कार्यक्रम लिखने में मदद करता है। अनुकूलन हमेशा बाद में आना चाहिए। यह भी हो सकता है कि आपके प्रोग्राम से थ्रेड हटाना इसे अनुकूलित कर रहा है (हालांकि अधिकांश प्रोग्रामर के लिए ऐसा नहीं है)।
नील

OT: मुझे आपका अवतार बहुत पसंद है। मुझे हंसाता है।
मार्जन वेनमा

@exhuma, मैं इस जवाब से सहमत हूं, लेकिन मैं इसे जोड़ूंगा कि यदि आप कोड की सादगी के लिए थ्रेड्स का उपयोग करने जा रहे हैं, तो यह ठीक है, लेकिन बहुत सावधान रहें कि आप थ्रेड-सेफ्टी और संभावित थ्रेड को कई थ्रेड्स के साथ समझते हैं। मल्टीथ्रेड कोड के एक साधारण टुकड़े की तरह प्रतीत हो सकता है कि आसानी से छिपी हुई दौड़ की स्थिति हो सकती है जो बहुत मुश्किल से ट्रैक-डाउन बग्स के वर्गीकरण को जन्म दे सकती है।
बेन ली
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.