वे दोनों एक ही उद्देश्य को पूरा करने लगते हैं। मैं एक दूसरे पर कब चुना होगा?मॉनिटर .ait()/Monitor.Pulse() के बजाय मैं ऑटोरसेट इवेंट और मैनुअल रीसेट इवेंट का उपयोग कब करूं?
उत्तर
घटनाओं का उपयोग करें जब आपके पास कोई थ्रेड हो जो किसी एक या कुछ घटनाओं को करने के लिए इंतजार कर रहा हो।
मॉनीटर का उपयोग करें यदि आप डेटा संरचना तक पहुंच प्रतिबंधित करना चाहते हैं तो सीमित कर सकते हैं कि कितने थ्रेड इसे एक्सेस कर सकते हैं।
मॉनीटर आमतौर पर संसाधन की रक्षा करते हैं, जबकि ईवेंट आपको कुछ बंद होने की सूचना देते हैं, जैसे एप्लिकेशन बंद हो रहा है।
इसके अलावा, ईवेंट का नाम दिया जा सकता है (OpenExisting विधि देखें), इससे उन्हें विभिन्न प्रक्रियाओं में सिंक्रनाइज़ेशन के लिए उपयोग करने की अनुमति मिलती है।
इस ट्यूटोरियल क्या आप को पता है की आवश्यकता होगी के विवरण विस्तृत हो गया है: http://www.albahari.com/threading/
विशेष रूप से, इस XXXResetEvent वर्गों को कवर किया जाएगा,
http://www.albahari.com/threading/part2.aspx
और इस को कवर किया जाएगा प्रतीक्षा/पल्स: http://www.albahari.com/threading/part4.aspx#_Wait_and_Pulse
मेरी राय में, मॉनिटर का उपयोग करना बेहतर है यदि आप कर सकते हैं, मॉनिटर। प्रतीक्षा करें और मॉनीटर.पल्स/पल्सएल का उपयोग धागे के बीच सिग्नलिंग के लिए किया जाता है (जैसे मैनुअल/ऑटो रीसेट इवेंट हैं) हालांकि मॉनिटर तेज है, और मूल सिस्टम संसाधन का उपयोग नहीं करता है। इसके अलावा स्पष्ट रूप से मॉनिटर को उपयोगकर्ता मोड में कार्यान्वित किया जाता है और प्रबंधित किया जाता है, जबकि मैन्युअल/ऑटो रीसेट एवेन्ट्स को कर्नेल मोड में स्विच करने की आवश्यकता होती है और पी/देशी Win32 कॉलों को आमंत्रित करने की आवश्यकता होती है जो प्रतीक्षा हैंडल का उपयोग करते हैं।
ऐसी स्थितियां हैं जहां आपको मैन्युअल/ऑटोरसेट इवेंट का उपयोग करने की आवश्यकता होगी, उदाहरण के लिए, उन प्रक्रियाओं के बीच सिग्नल करने के लिए जिन्हें आप नामित घटनाओं का उपयोग कर सकते हैं, और मुझे लगता है कि आपके ऐप में मूल धागे को सिग्नल करना है।
मैं केवल this excellent article में थ्रेडिंग के बारे में जो कुछ पढ़ता हूं उसे पुनर्जन्म दे रहा हूं।
पूरा लेख पढ़ने योग्य है, हालांकि लिंक आपको प्रतीक्षा हैंडल सेक्शन पर ले जाता है जो घटनाओं का विवरण देता है और प्रतीक्षा/नाड़ी की निगरानी करता है।
आप एक WaitHandle
का उपयोग जब आप एक धागा चाहते भेज सकते हैं या के बिना एक महत्वपूर्ण अनुभाग के लिए की जरूरत एक बाइनरी संकेत प्राप्त करने के लिए होगा। Monitor.Wait
और Monitor.Pulse
दूसरी ओर को एक महत्वपूर्ण अनुभाग की आवश्यकता है। बीसीएल में अधिकांश सिंक्रनाइज़ेशन तंत्र की तरह कुछ उल्लिखित है कि आपके द्वारा उल्लिखित दो का उपयोग कैसे किया जा सकता है। लेकिन, एक पल के लिए मत सोचो कि वे एक ही उद्देश्य को पूरा करते हैं।
Monitor.Wait
और Monitor.Pulse
एमआरई या एआरई की तुलना में बहुत अधिक प्राचीन सिंक्रनाइज़ेशन तंत्र हैं। वास्तव में, आप वास्तव में Monitor
कक्षा से अधिक कुछ भी नहीं कर सकते हैं, एमआरई या एआरई बना सकते हैं। समझने की सबसे महत्वपूर्ण अवधारणा यह है कि Monitor.Wait
और WaitHandle.WaitOne
विधियां अलग-अलग हैं। Wait
और WaitOne
दोनों धागे को WaitSleepJoin
स्थिति में डाल देंगे जिसका अर्थ है कि धागा निष्क्रिय हो जाता है और केवल Thread.Interrupt
या संबंधित Pulse
या Set
कॉल का जवाब देता है। लेकिन, और यह एक बड़ा अंतर है, Wait
एक महत्वपूर्ण खंड छोड़ देगा और इसे परमाणु तरीके से में पुनः प्राप्त करेगा।WaitOne
बस यह नहीं कर सकता। यह एक अंतर है जो इन सिंक्रनाइज़ेशन तंत्रों के व्यवहार के लिए मौलिक है जो उन परिदृश्यों को परिभाषित करता है जिनमें उनका उपयोग किया जा सकता है।
ज्यादातर स्थितियों में आप एक एमआरई या एआरई चुनते हैं। ये ज्यादातर स्थितियों को संतुष्ट करते हैं जहां एक थ्रेड को दूसरे से सिग्नल प्राप्त करने की आवश्यकता होती है। हालांकि, अगर आप अपना खुद का सिग्नलिंग तंत्र बनाना चाहते हैं तो आपको Wait
और Pulse
का उपयोग करना होगा। लेकिन, फिर से, .NET बीसीएल में पहले से ही सबसे लोकप्रिय सिग्नलिंग तंत्र शामिल हैं। निम्नलिखित सिग्नलिंग तंत्र पहले से मौजूद हैं ।
- ManualResetEvent (या ManualResetEventSlim)
- AutoResetEvent
- सेमाफोर (या SemaphoreSlim)
- EventWaitHandle
- CountdownEvent
- बैरियर
एक सम्मानजनक उल्लेख BlockingCollection
कक्षा में जाता है। यह प्रति सिग्नलिंग तंत्र नहीं है, लेकिन इसमें अतिरिक्त लाभ के साथ सिग्नलिंग तंत्र के गुण हैं जो आप सिग्नल को डेटा संलग्न कर सकते हैं। इस मामले में सिग्नल का मतलब है कि संग्रह में कोई आइटम उपलब्ध है और उस सिग्नल से जुड़े डेटा आइटम ही हैं।
- 1. मैन्युअल रीसेट इवेंट, ऑटो रीसेट इवेंट
- 2. एसिंक्रोनस क्लाइंट सॉकेट मैनुअल रीसेट इवेंट निष्पादन
- 3. pthread- जैसे विंडोज मैनुअल-रीसेट इवेंट
- 4. जावा के समतुल्य .NET के मैनुअल रीसेट इवेंट और वेटहैंडल
- 5. उद्देश्य-सी/कोको समकक्ष सी # मैनुअल रीसेट इवेंट
- 6. इवेंट बस का उपयोग कब करें?
- 7. ऑटो रीसेट इवेंट बनाम बूलियन थ्रेड को रोकने के लिए
- 8. मैन्युअल रीसेट इवेंट के बराबर बूस्ट?
- 9. मैनुअल रीसेट इवेंट या थ्रेड के बीच एक विकल्प बनाने के लिए। नींद()
- 10. टीवीर्टुअलस्टिंगट्री: ऑनमेइटर इटैम इवेंट और ऑनजीटटेक्स्ट इवेंट
- 11. मैं पेंट इवेंट कैसे कॉल करूं?
- 12. इवेंट
- 13. पायथन: मल्टीप्रोसेसिंग इवेंट
- 14. इवेंट कैप्चरिंग बनाम इवेंट बबलिंग
- 15. मॉनिटर बनाम WaitHandle आधारित धागा सिंक
- 16. डोमेन इवेंट
- 17. क्रोम के डेवलपर टूल में "डोमकंटेंट इवेंट" और "लोड इवेंट"
- 18. डोमेन इवेंट हैंडलर कब खेलते हैं?
- 19. विशिष्ट विंडोज इवेंट लॉग इवेंट
- 20. इवेंट हैंडलर?
- 21. मैं \ n और इसके विपरीत के बजाय PHP_EOL का उपयोग कब करूं? अजाक्स/Jquery ग्राहक समस्या
- 22. यह जांचने के लिए कि मैन्युअल रीसेट इवेंट का निपटारा कब किया गया है, इसे इवेंट हैंडलर के अंदर सेट करने की कोशिश करते समय?
- 23. Jquery इवेंट
- 24. इवेंट हैंडलर में शून्य जांच का उपयोग
- 25. मैं ऐप्पल इवेंट से स्रोत एप्लिकेशन कैसे प्राप्त करूं?
- 26. इवेंट प्रचार, ओवरले और ड्रैग-एंड-ड्रॉप इवेंट
- 27. क्लिक इवेंट
- 28. फेसबुक इवेंट एपीआई: इवेंट सदस्य (एफक्यूएल)
- 29. पेज इवेंट
- 30. मैं ऐपडोमेन का उपयोग कब करूं?
यूआरएल के लिए धन्यवाद। यह बहुत उपयोगी था। –