दिलचस्प पोस्ट
घटनाओं के फटने को सुचारू बनाने के लिए आरएक्स IObservable बफरिंग कैसे आईपीए फाइल पुनः हस्ताक्षर करने के लिए? क्या स्थानीय फाइल पर एक्सएसएल ट्रांस्फ़ॉर्म करने के लिए क्रोम बनाया जा सकता है? एसक्यूएल ग्रुप द्वारा कुल कार्य के साथ केस स्टेटमेंट सी ++ में यादृच्छिक दोहरी संख्या उत्पन्न करें 0 और 9 के बीच यादृच्छिक पूर्णांक उत्पन्न करें बैकअप एक GitHub भंडार क्या जेडीबीसी के साथ पोस्टग्रेड्स से कनेक्ट करते समय स्कीमा निर्दिष्ट करना संभव है? Greasemonkey या Tampermonkey में iframe को बाहर कैसे करें? WPF में एक बटन माउसओवर के लिए पृष्ठभूमि कैसे बदलें? स्टैक ऑवरफ्लो ऑटो-लिंक व्यवहार की नकल कैसे करें -सीपी स्विच का उपयोग किए बिना मैं Groovy में डेटाबेस जार कैसे लोड कर सकता हूँ? लार्वेल 5.2 में मल्टी ऑथ का उपयोग कैसे करें NSURL सत्र के माध्यम से पोस्ट अनुरोध भेजें एक ही आंशिक दृश्य को नियंत्रक को कई बार डेटा कहते हैं?

समान गर्तिका पर समानांतर कॉल / recv भेजना मान्य हैं?

  1. क्या हम एक धाे से दूसरे को बुलाते हैं और उसी सॉकेट पर दूसरे को बुला सकते हैं?
  2. क्या हम एक ही गर्तिका पर अलग-अलग थ्रेड्स से समान रूप से एकाधिक भेज सकते हैं?

मुझे पता है कि एक अच्छा डिजाइन इस से बचना चाहिए, लेकिन मैं यह स्पष्ट नहीं कर रहा हूं कि ये सिस्टम एपीआई कैसे व्यवहार करेंगे। मैं इसके लिए भी अच्छे दस्तावेज ढूंढने में असमर्थ हूं।

दिशा में कोई भी संकेत उपयोगी होगा।

Solutions Collecting From Web of "समान गर्तिका पर समानांतर कॉल / recv भेजना मान्य हैं?"

पीओएसआईआईएसएक्स ने अणु संचालन के रूप में भेजे जाने / आरएवीवी को परिभाषित किया है, तो मान लें कि आप पॉसिक्स भेज / आरईसी के बारे में बात कर रहे हैं, हाँ, आप उन्हें कई थ्रेड्स से एक साथ कॉल कर सकते हैं और चीजें काम करेंगे।

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

यदि आप SOCK_STREAM सॉकेट्स का उपयोग कर रहे हैं, तो काम करने की कोशिश में एक समानांतर कम होने की संभावना कम है क्योंकि send / rec ने संदेश के केवल एक भाग को भेज या प्राप्त कर सकते हैं, जिसका अर्थ है कि चीजें अलग हो सकती हैं।

ब्लॉकिंग को SOCK_STREAM सॉकेट पर ब्लॉक करना / ब्लॉक केवल जब तक वे कम से कम 1 बाइट भेजते हैं या ब्लॉक नहीं करते हैं, इसलिए अवरुद्ध और गैर-अवरोधन के बीच का अंतर उपयोगी नहीं है।

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

हालांकि, अगर भेजने / प्राप्त करने का आदेश अर्थपूर्ण रूप से महत्वपूर्ण है, तो आप खुद (क्रमशः आपके कोड) को विभिन्न थ्रेड्स में ऑपरेशन के बीच उचित अनुक्रमण सुनिश्चित करना है – जैसा कि हमेशा धागे के साथ होता है

मुझे नहीं पता कि समानांतर में कैसे प्राप्त करना संभवतः कुछ भी हासिल कर सकता है यदि आपके पास 3 बाइट्स संदेश है, तो 1 धागा 1 2 बाइट और दूसरा दूसरा बाइट प्राप्त कर सकता है, लेकिन आपके पास यह कहने का कोई तरीका नहीं है कि कौन सा था जब तक आपके संदेश केवल एक बाइट लंबा नहीं होते, तब तक कोई रास्ता नहीं है कि आप मज़बूती से प्राप्त होने वाले कई थ्रेड्स के साथ कुछ भी काम कर सकते हैं।

यदि आप एक ही कॉल में पूरे संदेश को भेजते हैं, तो एकाधिक भेज सकते हैं, लेकिन मुझे यकीन नहीं है। यह संभव है कि कोई दूसरे को ओवरराइट कर सकता है। निश्चित रूप से ऐसा करने के लिए कोई भी प्रदर्शन लाभ नहीं होगा

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