2012-10-09 13 views
9

एसिंक I/O के फायदों के साथ और अब यह कोड और लिखने के लिए काफी आसान है (Await और TAP विधियों का उपयोग करके) मैं सोच रहा हूं, अगर हमें डिफ़ॉल्ट रूप से एसिंक का उपयोग करना चाहिए और आवश्यकता होने पर सिंक का उपयोग करके केवल प्रदर्शन के लिए ट्यून करना चाहिए।क्या हमें डिफ़ॉल्ट रूप से async I/O का उपयोग करने के लिए स्विच करना चाहिए?

Async I/O कॉलिंग थ्रेड को मुक्त करता है और परिणाम की प्रतीक्षा करते समय कुछ और करने की अनुमति देता है। दूसरी ओर async I/O सिंक से थोड़ा धीमा है।

उत्तरदायी UI के लागू करने के लिए WinRT डिजाइनरों यह स्वीकार्य async-केवल तरीकों की पेशकश करने के लिए मिला।

AFAIK विंडोज फ़ाइल I/O आंतरिक रूप से async है। इस मूर्खता को देखते हुए यह मुझे स्पष्ट नहीं है, क्यों .NET में async फ़ाइल i/O सिंक की तुलना में धीमी होनी चाहिए।

मैं आम तौर पर सादगी और मजबूती का समर्थन करता हूं और केवल आवश्यक प्रदर्शन के लिए ट्यून करता हूं। अतीत में हमने कुछ सेवाओं को कॉल करने के अपवाद के साथ डिफ़ॉल्ट रूप से सिंक का उपयोग किया था और जहां फ़ोन जैसे प्लेटफॉर्म एसिंक लागू किए गए थे। हम शायद ही कभी async का उपयोग करके tuned।

+0

[pfxteam ब्लॉग] (http://msdn.microsoft.com/en-us/magazine/jj133817.aspx) इस संदर्भ में कुछ रोचक जानकारी होते हैं: * "कृपया ध्यान दें कि हम के अतुल्यकालिक संस्करणों में नहीं जोड़ा था एपीआई, इस तरह के TextReader.Peek के रूप में है कि एक बहुत छोटे विवरण के स्तर को किया था। कारण यह है कि अतुल्यकालिक एपीआई भी कुछ भूमि के ऊपर जोड़ सकते हैं और हम गलती से गलत दिशा में बढ़ रहा से डेवलपर्स को रोकने के लिए करना चाहता था है। यह भी मतलब है कि हम विशेष रूप से तरीकों के लिए अतुल्यकालिक के संस्करण उपलब्ध कराने का फैसला किया बाइनरी रीडर या बाइनरीवाइटर पर .... * –

उत्तर

13

आईओ async का उपयोग के साथ सी # 5 बहुत आसान हो गया है लेकिन अभी भी उत्पादकता इसके साथ जुड़े लागत है। उदाहरण के लिए आपको नए कीवर्ड छिड़कने की आवश्यकता है जहां पहले आवश्यक नहीं था। आपको अपनी विधि के रिटर्न प्रकार को बदलना होगा।

आप बाद में तय है कि एक विधि आईओ क्या करना चाहिए यदि आप async करने के लिए स्विच करने के लिए पूरे कॉल श्रृंखला बदलना होगा। यह एक गैर-स्थानीय परिवर्तन अन्य मॉड्यूल में फैल रहा है।

आप async IO प्रोफ़ाइल नहीं कर सकते हैं। प्रोफाइलिंग टूल कुछ भी नहीं उठाते हैं। यदि आप डीबगर को रोकते हैं तो थ्रेड स्टैक पर कुछ भी नहीं है। कोई भी कुछ नहीं कर रहा प्रतीत होता है। ऐसा इसलिए है क्योंकि एक async IO धागा नहीं रखता है। यह सिर्फ एक डेटा संरचना है (कर्नेल में एक वस्तु)।

निर्णय भी आवेदन प्रकार पर निर्भर करता है। WinForms या WPF ऐप में मैं एसिंक के साथ जाऊंगा क्योंकि यह यूआई थ्रेड में इतनी अच्छी तरह से एकीकृत करता है।

एक ASP.NET/WCF मुख्य लाभ की स्थापना में है कि आप थ्रेड पूल निकास नहीं है, जबकि आप लंबे समय से चल बैकएंड सेवाओं कहते हैं। अगर आपको ऐसी कोई समस्या नहीं है, और मुझे लगता है कि यह दुर्लभ है, तो आप एसिंक आईओ से बहुत कम लाभ प्राप्त करते हैं। वास्तव में आप डिफ़ॉल्ट रूप से प्रदर्शन खो देते हैं।

मेट्रो सेटिंग में आपके लिए निर्णय लिया गया है। माइक्रोसॉफ्ट (वैध रूप से) उपयोगकर्ता अनुभव के लिए डेवलपर उत्पादकता व्यापार करने का फैसला किया।

तो यह एक स्पष्ट निर्णय नहीं है। इस बिंदु पर पेशेवर और विपक्ष दोनों काफी कमजोर हैं। इसी कारण से मैं एक स्पष्ट सिफारिश देने से बचना चाहता हूं। यह विशिष्ट मामले पर बहुत निर्भर करता है।

8

मैं async का उपयोग कर आप एक स्वाभाविक रूप से अतुल्यकालिक आपरेशन, और तुल्यकालिक कोड अन्यथा जब सिफारिश करेंगे। यह सच है कि async थोड़ा धीमा है, लेकिन ज्यादातर मामलों में यह "आपके हथौड़ा में रेडियो को चालू करना" धीमा है।

यूआई कार्यक्रमों में, async जवाबदेही बढ़ जाती है। सर्वर ऐप्स में, async स्केलेबिलिटी बढ़ाता है।

AFAIK विंडोज फ़ाइल I/O आंतरिक रूप से async है। इस मूर्खता को देखते हुए यह मुझे स्पष्ट नहीं है, क्यों .NET में async फ़ाइल i/O सिंक की तुलना में धीमी होनी चाहिए।

असिंक्रोनस कोड धीमा है क्योंकि इसे एसिंक्रोनस ऑपरेशन को ट्रैक करने के लिए संरचनाओं को आवंटित करना है; सिंक्रोनस कोड केवल वर्तमान थ्रेड (और इसके ढेर) का उपयोग करता है। तो ऑपरेशन खुद धीमा नहीं है, लेकिन कुल मिलाकर कचरा कलेक्टर पर अधिक दबाव के कारण मामूली गति कम हो जाती है।

मैं आमतौर पर सादगी और मजबूती का समर्थन करता हूं और केवल आवश्यक प्रदर्शन के लिए ट्यून करता हूं।

मैं सहमत हूं। यदि आपके पास एक ऑपरेशन है जो स्वाभाविक रूप से एसिंक्रोनस (जैसे I/O) है, तो async API का पर्दाफाश करें। और यदि आपके पास एक ऑपरेशन है जो स्वाभाविक रूप से तुल्यकालिक है, तो एक सिंक्रोनस एपीआई का पर्दाफाश करें। स्टीफन टब के इस पर कुछ महान ब्लॉग पोस्ट हैं (here और here)।

संबंधित मुद्दे

 संबंधित मुद्दे