मैं network लाइब्रेरी में किए गए डिज़ाइन निर्णय को बेहतर ढंग से समझने की कोशिश कर रहा हूं। सम्मानित स्रोत a github issue और mailing list response में उल्लेख करते हैं कि network
गैर-अवरुद्ध सॉकेट का उपयोग करता है। डिफ़ॉल्ट अवरोधन व्यवहार का उपयोग करने के बजाय, जब तक सॉकेट पढ़ने के लिए तैयार नहीं हो जाता तब तक वे select ब्लॉक करने के लिए उपयोग करते हैं। यह बेहतर क्यों है? किसी भी तरह से, यह अवरुद्ध हो जाता है, और network
केवल उपयोगकर्ताओं को समाप्त करने के लिए एक अवरुद्ध एपीआई का खुलासा करता है। मेरा अनुमान है कि एफएफआई कॉल को अवरुद्ध करना बुरा है और select
के आसपास कुछ प्रकार का जीएचसी जादू है, लेकिन मैं इसकी पुष्टि करने में सक्षम नहीं हूं।हैकेल की नेटवर्क लाइब्रेरी गैर-अवरुद्ध सॉकेट का उपयोग क्यों करती है?
एक मामूली तरफ के रूप में, मुझे में कॉल करने में select
नहीं मिल रहा है। कोडबेस को पकड़ना कुछ भी नहीं बदला। मैंने अभी GHC.Event खोजा है, जो कि select
को सीधे कॉल करने के बजाय उपयोग किए जाने वाले कार्यों को प्रदान करता है, लेकिन network
दिखाता है कि यह भी इसका उपयोग नहीं करता है।
ghc रनटाइम सिस्टम में कहीं भी एक चयन (या मतदान) लूप होना चाहिए। सामान्य रूप से, ghc हर जगह गैर-अवरुद्ध I/O का उपयोग करने का प्रयास करता है। – melpomene
मैं _guess_ होगा कि यह जीएचसी के लिए 'उपज' बिंदु के रूप में प्रयोग किया जाता है, हरे रंग के थ्रेड शेड्यूलर (संभवतः) किसी अन्य थ्रेड पर नियंत्रण देते हैं? हालांकि वास्तव में नहीं जानते हैं। – Cubic