2010-01-28 16 views
32

मैं इस समय मल्टी थ्रेडिंग सीख रहा हूं, सी # में, लेकिन सभी सीखने के साथ ही मैं सर्वोत्तम प्रथाओं को सीखना पसंद करता हूं। फिलहाल क्षेत्र अस्पष्ट लगता है। मैं मूल बातें समझता हूं, और मैं धागे बना सकता हूं।मल्टी थ्रेडिंग

बहु थ्रेडेड अनुप्रयोगों को बनाने के दौरान मुझे क्या देखना चाहिए। क्या कोई सेट नियम या सर्वोत्तम प्रथाएं हैं जिनके बारे में मुझे पता होना चाहिए? या लाइन के नीचे पर्ची अप से बचने के लिए याद रखने के लिए कुछ भी?

प्रतिक्रियाओं के लिए धन्यवाद।

+1

यदि आप सी # का उपयोग कर रहे हैं तो आपको कार्य समांतर लाइब्रेरी का उपयोग करने पर विचार करना चाहिए। यह आपको धागे और ताले के बजाय कार्य और बाधाओं के बारे में सोचने की अनुमति देता है। यह अमूर्तता में सुधार करता है। –

+0

@Ade मिलर: यह बहुत अच्छी सलाह है - मैं जोड़ दूंगा कि आप प्रतिक्रियाशील एक्सटेंशन स्थापित करके .NET3.5 में भी TPL और PLINQ का उपयोग कर सकते हैं: http://msdn.microsoft.com/en-us/ devlabs/ee794896.aspx –

उत्तर

33

पाया जा सकता है MSDN Best Practices के अलावा, मैं जोड़ देंगे:

  1. अपने खुद के धागे मत बनाओ। ThreadPool (या नया Task Parallel Library कार्य) का उपयोग करना पसंद करें। अपने स्वयं के धागे का प्रबंधन शायद ही कभी, सही डिजाइन निर्णय है।
  2. यूआई संबंधित मुद्दों के साथ अतिरिक्त देखभाल करें। Control.Invoke (विंडोज़ फॉर्म) और Dispatcher.Invoke (डब्ल्यूपीएफ), या SynchronizationContext का उपयोग करें। पोस्ट/भेजें
  3. उपयुक्त होने पर BackgroundWorker class का उपयोग करने का समर्थन करें।
  4. सब कुछ तुल्यकालन
  5. फ़ेवर जब संभव

ताला लगा एक बार जब आप और अधिक उन्नत पाने से अधिक Interlocked class में तरीकों की आवश्यकता है कि सिंक्रनाइज़ करने के लिए सुनिश्चित करें कि कम से कम

  • को ताले के माध्यम से तुल्यकालन रखने की कोशिश करें, और कर रहे हैं अनुकूलित करने की कोशिश कर रहे हैं, अन्य चीजों को देखने के लिए:

    1. false sharing के लिए देखें। यह विशेष रूप से समस्याग्रस्त है जब सरणी के साथ काम करते हैं, क्योंकि प्रत्येक सरणी किसी सरणी में किसी भी तत्व को लिखती है, जिसमें .NET में बाउंड चेक शामिल होता है, जो प्रभाव में तत्व 0 के निकट सरणी पर पहुंच का कारण बनता है (स्मृति में तत्व 0 से पहले)। यह perf का कारण बन सकता है। नाटकीय रूप से डाउनहिल जाने के लिए।
    2. बंद करने के मुद्दों से सावधान रहें, खासकर जब लूपिंग स्थितियों में काम करते हैं। यदि आप प्रतिनिधि बनाते हैं तो गलत दायरे में एक चर पर बंद कर रहे हैं तो गंदा बग हो सकती है।
  • 9

    MSDN - Managed Threading Best Practices

    MSDN अनुच्छेद खतरा क्षेत्रों पर छू और प्रबंध/उन क्षेत्रों के आसपास काम कर के लिए सर्वोत्तम प्रथाओं देने पर एक बहुत अच्छा काम करता है।

    2

    क्या ऐसी चीजें हैं जिनके बारे में आपको पता होना चाहिए? निश्चित रूप से।

    खतरों:

    एक उपयोगी और दिलचस्प लेख here

    5

    चूंकि मेरे पास यह एक और टैब पर खुला है ...

    http://www.yoda.arachsys.com/csharp/threads/

    मैं में केवल कुछ अध्यायों हूँ लेकिन यह जॉन स्कीट द्वारा लिखा गया था।

    2

    मैं अत्यधिक अनुशंसा करता हूं कि आप इसे पचाने से शुरू करें: http://www.albahari.com/threading/

    +0

    यह अच्छा है कि आप इसे लाया। मैंने उस 80 पेज पीडीएफ को मुद्रित किया और मैं इसे अब इसके माध्यम से जा रहा हूं। –

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