मैं Silverlight में पिछले साल कोडिंग, जो मैं समय की एक अच्छा सौदा के माध्यम से सोच (और साथ लड़) एक ही मुद्दों आप का वर्णन कर रहे हैं खर्च किया है इसका मतलब है की सबसे अधिक खर्च किया है।
संक्षेप में, के रूप में अन्य लोगों ने बताया है, अतुल्यकालिक मॉडल के लिए असली ताकत मजबूत प्रणाली है कि वास्तविक दुनिया के साथ अच्छी तरह से interoperate बनाने के लिए की क्षमता है। कोई भी वास्तविक रूप से सिल्वरलाइट (या फ्लैश) एप्लिकेशन का उपयोग नहीं कर सकता है यदि यूआई थ्रेड एक वेब सेवा कॉल के लिए कुछ सेकंड लगने पर हर बार रुका हुआ था।
सबसे बड़ी नकारात्मक पक्ष यह है कि जिसके परिणामस्वरूप कोड जटिल और निवारण करने के लिए मुश्किल है। त्रुटि प्रबंधन जैसी चीजें एक पीआईटीए हैं, लेकिन सबसे कष्टप्रद चीजें जिनसे मुझे निपटना पड़ा है, वे एकाधिक एसिंक्रोनस कॉल से प्रतिक्रियाओं को समन्वयित कर रहे हैं। यदि, कहें, आपको कॉल बी बनाने से पहले कॉल ए से जानकारी की आवश्यकता है, और आपको कॉल सी (और आगे) बनाने से पहले कॉल बी से जानकारी की आवश्यकता है, परिणामी कोड वास्तव में अप्रिय दिखता है, और अजीब साइड इफेक्ट्स के सभी प्रकार के लिए अतिसंवेदनशील है । इन सभी चीजों को काम करने के लिए तकनीकें हैं, और यहां तक कि उचित रूप से साफ है, लेकिन यदि आप सिंक्रोनस दुनिया (जैसे मैं था) से आ रहा हूं, तो यह एक महत्वपूर्ण सीखने की वक्र है। (और यह मदद नहीं करता है कि माइक्रोसॉफ्ट डब्ल्यूसीएफ कॉल से निपटने के तरीके के रूप में घटनाओं को धक्का देता है, जब मेरी राय में कॉलबैक बहुत साफ और कमजोर दुष्प्रभावों के बारे में कम संवेदनशील होते हैं, जिनके बारे में मैं बात कर रहा था।)
(और हाँ, अन्य लोगों का कहना है कि यह भाषा अतुल्यकालिक इतना है कि के रूप में है कि विशेष व्यवस्थाएं एक अतुल्यकालिक तरीके से अपने कोड के निर्माण की आवश्यकता नहीं है में सही कर रहे हैं -। लेकिन मैं तुम क्या मतलब मिल)
अद्यतन 2014.09.23 -
मैंने ऊपर दिए गए उत्तर को लिखने के बाद से कई प्रकार के एसिंक्रोनस फ्रेमवर्क के साथ बहुत अधिक काम किया है (जैसा कि शायद हर कोई है जिसने कोई वेब कोडिंग किया है), और सोचा कि मैं कुछ जोड़ूंगा अतिरिक्त यादृच्छिक नोट्स:
यदि आप सी # या एफ # जैसी भाषा का उपयोग कर रहे हैं जिसमें प्रथम श्रेणी के असीमित समर्थन है, तो कम से कम एक बार जब आप अपने सिर को अजीब async
/await
पैटर्न के चारों ओर लपेटते हैं, तो यह बहुत आसान हो जाता है। एसिंक्रोनस कॉल के आस-पास आसानी से लूप करने में सक्षम होने के कारण, और पूरी चीज को सरल try/catch
से लपेटें, अगर आपको इसे पुराने तरीके से करना पड़ा तो आश्चर्यजनक है।
आप प्रथम श्रेणी async समर्थन के साथ एक भाषा का प्रयोग नहीं कर रहे हैं, जो कुछ भी promise
या future
या task
समर्थन का उपयोग शुरू कर उस भाषा प्रदान करता है (जैसे, JQuery के $.Deferred()
, या कोणीय के $q.defer()
। उन एक बहुत क्लीनर कर रहे हैं और कॉलबैक के साथ आम तौर पर आपको जो मिलता है उससे बेहतर संरचना प्रदान करें।
स्केल करने योग्य सर्वर-साइड सिस्टम लिखने के लिए असिंक्रोनस कोड महत्वपूर्ण है। एक सामान्य वेब सर्वर स्केल बनाने के साथ सबसे बड़े मुद्दों में से एक यह है कि यह थ्रेड से बाहर चलना शुरू कर देता है, कम से कम, यह करता है अगर यह आने वाले अनुरोध तक पहुंचने के लिए धागे को समर्पित करता है। अगर वह थ्रेड स्टाल करता है, क्योंकि यह लंबे समय तक इंतजार कर रहा है, समाप्त करने के लिए सिंक्रोनस कॉल चलाना, यह किसी और चीज़ के साथ मदद करने के लिए पूरी तरह से अनुपलब्ध है। आपका वेब सर्वर कोड एसिंक बनाने के लिए बहुत बेहतर है, ताकि जब आप डीबी कॉल पर वापस लौटने की प्रतीक्षा कर रहे हों, तो वह थ्रेड सेवा के आधे दर्जन अन्य अनुरोधों को सेवा दे सकता है जबकि डीबी जा रहा है और जो कुछ भी डीबी कर रहा है। इस बिंदु पर, अत्यधिक स्केलेबल सिस्टम के लिए, शहर में एसिंक एकमात्र गेम है। (बस किसी भी नोड aficionado पूछो।)
स्रोत
2009-12-18 19:49:47
एक भाषा असीमित कैसे हो सकती है? –
@NSD - उसका क्या मतलब है कि फ्लेक्स कभी भी अवरुद्ध नहीं होता - सभी प्लेटफॉर्म पर अवरुद्ध होने वाले सभी ऑपरेशन असंगत रूप से कार्यान्वित किए जाते हैं। – Grokys
क्या आपके पास "सिंक्रोनस निष्पादन भाषा" की परिभाषा है? या क्या आप बस फ्लेक्स की घटना-संचालित प्रकृति की व्याख्या कर रहे हैं (जो जावा के समेत लगभग हर दूसरे जीयूआई एपीआई में भी पाया जाता है) "एसिंक्रोनस" के रूप में? – kdgregory