मैं पहली बार के लिए Clojure core.async पर देख रहा हूँ, और रिच हिक्की द्वारा इस उत्कृष्ट प्रस्तुति के माध्यम से जा रहा था:clojure core.async चैनल कैसे साफ़ हो जाते हैं?
: http://www.infoq.com/presentations/clojure-core-asyncमैं उदाहरण के बारे में एक प्रश्न वह अपने प्रस्तुति के अंत में पता चलता था
रिच के अनुसार, यह उदाहरण मूल रूप से एक विशिष्ट क्वेरी के लिए वेब, वीडियो और छवि परिणाम प्राप्त करने का प्रयास करता है। यह उन परिणामों में से प्रत्येक के लिए समानांतर में दो अलग-अलग स्रोतों की कोशिश करता है, और केवल प्रत्येक के लिए सबसे तेज़ परिणाम निकालता है। और पूरा ऑपरेशन 80ms से अधिक नहीं ले सकता है, इसलिए यदि हम उदाहरण नहीं प्राप्त कर सकते हैं 80ms में एक छवि परिणाम, हम बस छोड़ देंगे। 'सबसे तेज़' फ़ंक्शन एक नया चैनल बनाता है और देता है, और परिणाम प्राप्त करने और इसे चैनल पर रखने के लिए दो प्रक्रियाओं को रेसिंग शुरू करता है। फिर हम 'सबसे तेज़' चैनल का पहला परिणाम लें और इसे सी चैनल पर थप्पड़ मार दें।
मेरा प्रश्न: हमारे पहले परिणाम लेने के बाद इन तीन अस्थायी, अज्ञात 'सबसे तेज़' चैनलों का क्या होता है? संभवतः अभी भी एक प्रक्रिया है जो दूसरे परिणाम को चैनल पर रखने की कोशिश कर रही है, लेकिन कोई भी सुन रहा है, इसलिए यह वास्तव में कभी पूरा नहीं होता है। और चूंकि चैनल कभी भी किसी भी चीज़ से बंधे नहीं है, ऐसा प्रतीत नहीं होता है कि हमारे पास इसके साथ कुछ भी करने का कोई तरीका नहीं है। क्या प्रक्रिया & चैनल "एहसास" होगी कि कोई भी अपने परिणामों की परवाह नहीं करेगा और खुद को साफ करेगा? या क्या हम अनिवार्य रूप से इस कोड में तीन चैनल/प्रक्रियाओं को "रिसाव" करते थे?
हम्म, ठीक है। अब आपके पास और लियोन से दो विवादित उत्तर हैं। क्या आप अपने दावे का संदर्भ प्रदान कर पाएंगे? – Ord
हां, कृपया कार्यान्वयन विवरण से लिंक करें। साथ ही, कृपया बताएं कि यह उपरोक्त कोड नमूने में कैसे काम करेगा। –
ई जी। एल 4 में गो ब्लॉक ले लो: मान लीजिए 'सी' डाल को अवरुद्ध कर रहा है। 'सबसे तेज़' एक दूसरा पॉट बनाता है जिसे उपभोग नहीं किया जाता है। जब वास्तव में, उपरोक्त कोड नमूने में, 'सी' हैं और चैनल 'सबसे तेज़' कचरा द्वारा वापस लौटाया गया है? –