Socket.BeginSend()
विधि पर विचार करें। यदि दो थ्रेड पूल धागे इस विधि को एक साथ कॉल करने के लिए थे, तो क्या उनके संबंधित संदेश एक-दूसरे के साथ मिलकर खत्म हो जाएंगे या सॉकेट क्लास इसे होने से रोकता है?असिंक्रोनस एक सॉकेट थ्रेड को सुरक्षित लिखते हैं?
उत्तर
मुझे एक परिचित post on the MSDN forum मिला जो आपके प्रश्न का उत्तर देने लगता है।
- आप एक साथ कई BeginSends कतार कर सकते हैं। आप लॉक करने के लिए की जरूरत नहीं है
संपादित करें:
इससे भी अधिक दिलचस्प जानकारियां:
आप नीचे Remark section of the MSDN doc BeginSend() में एक सा स्क्रॉल हैं, तो आप कॉलबैक के दिलचस्प उपयोग मिलेगा विधियां जो आपके लिए प्रासंगिक हो सकती हैं।
[...] यदि आप BeginSend विधि को कॉल करने के बाद मूल थ्रेड को ब्लॉक करना चाहते हैं, तो WaitHandle.WaitOne विधि का उपयोग करें। [...]
मुझे यह नहीं पता था, धन्यवाद! – covertCoder
यह वही है जो मैं खोज रहा था! धन्यवाद! – Dabloons
.NET सॉकेट उदाहरण कुछ तरीकों (समान या अलग-अलग) के साथ एक साथ कॉल में थ्रेड-सुरक्षित नहीं हैं असंगत स्थिति का कारण बन सकता है। हालांकि, BeginSend()
और BeginReceive()
विधियां के संबंध में थ्रेड-सुरक्षित हैं।
प्रत्येक (या दोनों) को कई बकाया कॉल रखना सुरक्षित है।
BeginReceive()
के मामले में, जब वे ऑर्डर में डेटा उपलब्ध होते हैं तो उन्हें सेवा दी जाएगी। यह उपयोगी हो सकता है, उदाहरण के लिए, आपकी प्रसंस्करण लंबी है लेकिन आप चाहते हैं कि अन्य जितनी जल्दी हो सके। बेशक इस मामले में आप अपने कोड को एकाधिक रसीदों को एक साथ संसाधित कर सकते हैं और आपको अपने आवेदन स्थिति की सुरक्षा के लिए अपने स्वयं के सिंक्रनाइज़ेशन तर्क की आवश्यकता हो सकती है।
BeginSend()
के मामले में, प्रत्येक कॉल सॉकेट बफर में भेजे गए डेटा पुश करने के लिए प्रयास करेंगे, और जैसे ही यह वहाँ स्वीकार किया जाता है, अपने कॉलबैक (जहां EndSend()
कॉल करेंगे) कहा जाएगा। अगर किसी भी कॉल के लिए अपर्याप्त बफर स्पेस है, तो यह ब्लॉक हो जाएगा।
नोट: यह न मानें कि डिफ़ॉल्ट 8k बफर का अर्थ है "मैं जल्दी से वास्तव में डेटा है, तो यह अवरुद्ध कर देगा के 8k साथ BeginSend()
कॉल कर सकते हैं" निम्नलिखित के रूप में सत्य हैं:
8K है एक "मामूली आकार" संख्या, और बफर हटना और कुछ हद तक बढ़ने
सकता है आप कॉल की 8K लायक अप queing कर रहे हैं, डाटा नेटवर्क को कम करने पर भेजा जा रहा हो जाएगा कि कतारबद्ध डेटा की 8K
सामान्य में:
यदि आप एक धागा भीतर
BeginSend()
कई बार कहते हैं, आप आश्वासन दिया जाता है जिस क्रम में वे कहा जाता था में मशीन छोड़ देंगे भेजता है।यदि आप कई धागे से
BeginSend()
पर कॉल करते हैं, तब तक आदेश की कोई गारंटी नहीं है जब तक कि आप किसी अन्य विशिष्ट क्रम में वास्तविक कॉल को लागू करने के लिए कुछ अन्य अवरोध तंत्र का उपयोग न करें। हालांकि प्रत्येक कॉल नेटवर्क बाइट्स की एक संगत धारा में अपना डेटा सही तरीके से भेज देगा।
आपका उत्तर मूल प्रश्न के कुछ साल बाद आया और मैं इसे अभी देख रहा हूं (एक और साल बाद) लेकिन मैं चाहता हूं कि आप यह जान लें कि इसमें बहुत विस्तार हुआ है और मैं वास्तव में इसकी सराहना करता हूं। हालांकि, नेट फ्रेमवर्क और डेवलपर के रूप में मेरा कौशल का मेरा व्यक्तिगत ज्ञान अब इस प्रश्न से बहुत दूर है, यह उत्तर भविष्य के पाठकों के लिए एक महान संसाधन होगा। अगर मैंने पहले से ही सही उत्तर के रूप में उत्तर नहीं दिया था, तो मैं आपको सही उत्तर दूंगा। बहुत सराहना की। – Dabloons
- 1. सी # असिंक्रोनस सॉकेट प्रश्न
- 2. थ्रेड को समझना + असिंक्रोनस
- 3. सी सॉकेट एपीआई थ्रेड सुरक्षित है?
- 4. अस्थायी टेबल थ्रेड-सुरक्षित हैं?
- 5. स्थिर विधियां थ्रेड सुरक्षित हैं
- 6. Win32 विंडोज थ्रेड सुरक्षित हैं?
- 7. क्वार्ट्ज शेड्यूलर थ्रेड सुरक्षित हैं?
- 8. क्या जावा सॉकेट का प्रिंटवाइटर थ्रेड सुरक्षित है?
- 9. एक चर (थ्रेड) की थ्रेड-सुरक्षित सेटिंग?
- 10. क्या .NET सॉकेट भेजें()/प्राप्त करें() थ्रेड-सुरक्षित?
- 11. क्या एक गुवा टेबल थ्रेड सुरक्षित है जब इसके बैकिंग मानचित्र थ्रेड सुरक्षित हैं?
- 12. एक असिंक्रोनस HttpWebRequest
- 13. नोडजेस एक फ़ाइल में जेसन लिखते हैं
- 14. बनाना एक वर्ग थ्रेड-सुरक्षित
- 15. डेटा संरचना थ्रेड-सुरक्षित (जावा)
- 16. आप यूटीएफ -8 के लिए सुरक्षित कोड कैसे लिखते हैं?
- 17. क्या सी # प्रतिनिधि थ्रेड-सुरक्षित हैं?
- 18. आईआईएस में सिंगलटन कक्षाएं थ्रेड-सुरक्षित हैं?
- 19. इवेंट हैंडलर थ्रेड सुरक्षित नहीं हैं?
- 20. अपरिवर्तनीय वस्तुएं थ्रेड-सुरक्षित क्यों हैं?
- 21. शब्दकोश थ्रेड-सुरक्षित एक्सेस करना चाहते हैं?
- 22. IENumerable लिंक विधियों थ्रेड-सुरक्षित हैं?
- 23. क्या पाइथन अंतर्निहित कंटेनर थ्रेड-सुरक्षित हैं?
- 24. जावा में प्राइमेटिव डेटाटाइप थ्रेड-सुरक्षित हैं
- 25. रूबी क्लास विधियां थ्रेड-सुरक्षित हैं? जैसे
- 26. इसे सुरक्षित एक ही सॉकेट</p> <p>यह सुरक्षित है के लिए एक से अधिक थ्रेड
- 27. एक परिवर्तनीय थ्रेड-सुरक्षित के साथ-साथ पढ़ रहे हैं?
- 28. एपोल थ्रेड-सुरक्षित है?
- 29. विंडोज थ्रेड सुरक्षित और गैर-थ्रेड सुरक्षित विंडोज
- 30. असिंक्रोनस CreateProcess?
हालांकि यह काम करेगा, आपको केवल यूपीपी जैसे अविश्वसनीय ऑर्डरिंग डेटाग्राम आधारित प्रोटोकॉल के साथ ऐसा करना चाहिए। कारण यह है कि यदि दो धागे BeginSend को कॉल करने की दौड़ करते हैं, तो आप स्रोत पर भेजने के आदेश से बाहर हो सकते हैं। टीसीपी का उपयोग करते समय इसका परिणाम डेटा भ्रष्टाचार होगा। –