2010-05-21 20 views
10

में उपलब्ध समानांतर प्रौद्योगिकियां मैं नेट प्लेटफॉर्म पर नया हूं। मैं एक खोज किया था और पाया कि नेट में समानांतर कंप्यूटिंग करने के कई तरीके हैं कि:नेट

  1. टास्क समानांतर लाइब्रेरी है, जो नेट 3.5 है में समानांतर कार्य।

  2. PLINQ, नेट 4.0

  3. Asynchounous प्रोग्रामिंग, नेट 2.0, (async मुख्य रूप से आई/ओ भारी कार्य करने के लिए प्रयोग किया जाता है, एफ # एक संक्षिप्त वाक्य रचना इस समर्थन है)। मैं इसे सूचीबद्ध करता हूं क्योंकि मोनो में, कोई टीपीएल या पिनिंगक नहीं लगता है। इस प्रकार यदि मुझे क्रॉस प्लेटफॉर्म समानांतर प्रोग्राम लिखने की आवश्यकता है, तो मैं async का उपयोग कर सकता हूं।

  4. नेट थ्रेड। कोई संस्करण सीमा नहीं है।

क्या आप इन पर कुछ छोटी टिप्पणियां दे सकते हैं या इस सूची में और अधिक विधियां जोड़ सकते हैं? धन्यवाद।

+1

कच्चे डेटा के लिए कुछ उपयोगी लिंक: http://msdn.microsoft.com/en-us/concurrency/ee851578.aspx http://channel9.msdn.com/shows/The + ज्ञान + चैंबर/मल्टी कोर और समानांतर प्रोग्रामिंग-व्यवहार/ http://blogs.msdn.com/pfxteam/rss.xml – Brian

+0

खैर, PLINQ/'Parallel' निश्चित रूप से सबसे आसान उपयोग करने के लिए, लेकिन नहीं कर रहे हैं सभी स्थितियों में लागू –

उत्तर

16

प्रभावी ढंग से multithread कैसे निर्धारित करने के लिए आपको उचित मात्रा में शोध करने की आवश्यकता है। Microsoft Parallel Computing team's site का हिस्सा कुछ अच्छा technical articles है।

  1. Thread वर्ग:

    मेरे सिर के ऊपर बंद, वहाँ बहु सूत्रण के बारे में जाने के लिए कई तरीके हैं।

  2. ThreadPool, जिसमें आई/ओ-बाउंड ऑपरेशंस और आई/ओ समापन पोर्ट के लिए भी समर्थन है।
  3. Begin*/End* असीमित परिचालन।
  4. इवेंट-आधारित एसिंक्रोनस प्रोग्रामिंग (या "ईबीएपी") घटक, जो SynchronizationContext का उपयोग करते हैं।
  5. BackgroundWorker, जो एक ईबीएपी है जो एक एसिंक्रोनस ऑपरेशन को परिभाषित करता है।
  6. Task कक्षा (कार्य समांतर लाइब्रेरी) .NET 4.
  7. समांतर LINQ। समानांतर पर एक good article है। फॉरएच (टास्क समांतर लाइब्रेरी) बनाम PLINQ।
  8. Rx या "LINQ से ईवेंट", जिसमें अभी तक गैर-बीटा संस्करण नहीं है लेकिन पूरा होने के करीब है और आशाजनक लग रहा है।
  9. (केवल एफ #) असीमित वर्कफ़्लो।

अद्यतन: वहाँ एक लेख Understanding and Applying Parallel Patterns with the .NET Framework 4 कि कुछ दिशा (हालांकि यह .NET 4 मान लिया गया है और Rx को कवर नहीं करता), जिस पर समाधान समानांतर परिदृश्यों की जो प्रकार के लिए उपयोग करने के लिए देता है डाउनलोड के लिए उपलब्ध है।

+1

+1 एक व्यापक सूची –

3

Reactive Extensions for .NET (Rx)

आरएक्स घटनाओं के लिए मूल रूप से LINQ प्रश्नों है भी है। यह आपको एसिंक्रोनस डेटा स्ट्रीम को संसाधित करने और गठबंधन करने की अनुमति देता है, उसी तरह linq आपको संग्रहों के साथ काम करने की अनुमति देता है। तो आप शायद अन्य समानांतर प्रौद्योगिकियों के साथ संयोजन के रूप में इसका उपयोग अपने समानांतर संचालन के परिणामों को ताले और अन्य निम्न स्तर के थ्रेडिंग प्राइमेटिव के बारे में चिंता किए बिना एक साथ लाने के तरीके के रूप में करेंगे।

Expert to Expert: Brian Beckman and Erik Meijer - Inside the .NET Reactive Framework (Rx) आरएक्स के बारे में क्या एक अच्छा अवलोकन देता है।

संपादित करें: एक और पुस्तकालय के लायक उल्लेख कन्करेंसी और समन्वय क्रम (सीसीआर), यह एक लंबे समय (06 से पहले) के लिए चारों ओर हो गया है और Microsoft Robotics Studio के हिस्से के रूप में भेज दिया जाता है।

आरएक्स के पास बहुत ही अच्छे विचार हैं जो सीसीआर के अंदर है, लेकिन मेरी राय में एक बहुत अच्छा एपीआई है। सीसीआर में अभी भी कुछ रोचक चीजें हैं, हालांकि यह जांचना उचित हो सकता है। एक वितरित सेवा ढांचा भी है जो सीसीआर के साथ काम करता है जो आप जो कर रहे हैं उसके आधार पर इसे उपयोगी बना सकता है।

Expert to Expert: Meijer and Chrysanthakopoulos - Concurrency, Coordination and the CCR

+0

मैं नहीं एक सुराग कैसे मैं इस के लिए एक downvote पाने में कामयाब रहे है, आरएक्स समानांतर प्रोग्रामिंग काफी कुछ स्थितियों में आसान बना देता है - मैं इसे बड़े पैमाने पर इस्तेमाल करते हैं। Rx का उल्लेख करने वाले पहले व्यक्ति होने के लिए –

+0

+1। ;) –

+0

@Mauricio वे अत्यधिक संबंधित हैं, समानांतर में सब कुछ चल रहा है, तो आप अपने परिणामों का समन्वय नहीं कर सकते हैं बेकार है। इस सवाल से यह स्पष्ट है कि ओपी इस पहलू में भी रूचि रखता है। उन्होंने कहा, "एफ # में एक संक्षिप्त वाक्यविन्यास है जिसका समर्थन है" निरंतरता मोनाद का जिक्र करते हुए, आरएक्स अनिवार्य रूप से LINQ का समर्थन करने वाली सभी .NET भाषाओं के लिए निरंतरता मोनाड है। –

2

एक और .NET 4.0 है, जो इसी तरह की है में और क्या आप पहले से ही पता चला है की तर्ज पर नया कार्य समानांतर पुस्तकालय है, लेकिन इस एक दिलचस्प पढ़ा जा सकता है:

Task Parallel Library

11

कड़ाई से बोलते हुए, समांतर, असीमित और समवर्ती के बीच भेद यहां किया जाना चाहिए।

समांतर अर्थ यह है कि एक "कार्य" कई छोटे उप-"कार्यों" के बीच विभाजित होता है जिसे एक ही समय में चलाया जा सकता है। इसके लिए एक बहु-कोर सीपीयू या बहु-सीपीयू कंप्यूटर की आवश्यकता होती है, जहां प्रत्येक कार्य में समर्पित कोर या सीपीयू होता है। या एकाधिक कंप्यूटर। PLINQ (डेटा समांतरता) और टीपीएल (कार्य समांतरता) इस श्रेणी में आते हैं।

असिंक्रोनस का अर्थ है कि कार्य एक-दूसरे को अवरुद्ध किए बिना चलते हैं। एफ # की एसिंक अभिव्यक्ति, आरएक्स, स्टार्ट/एंड पैटर्न एसिंक प्रोग्रामिंग के लिए सभी एपीआई हैं।

Concurrency एक अवधारणा समानांतरता और एसिंक्रोनि से अधिक व्यापक है। Concurrency का मतलब है कि एक ही समय में कई "कार्य" चलते हैं, एक दूसरे के साथ बातचीत करते हैं। लेकिन इन "कार्यों" को अलग-अलग भौतिक कंप्यूटिंग इकाइयों पर चलाने की ज़रूरत नहीं है, जैसा समांतरता में है। उदाहरण के लिए, मल्टीटास्किंग ऑपरेटिंग सिस्टम टाइम स्लाइस का उपयोग करते हुए सिंगल-कोर सिंगल-सीपीयू कंप्यूटर पर भी कई प्रक्रियाओं को निष्पादित कर सकते हैं। उदाहरण के लिए अभिनेता मॉडल और संदेश पास करने के साथ Concurrency प्राप्त किया जा सकता है (उदाहरण के लिए एफ # मेलबॉक्स, एरलांग प्रक्रियाएं (नेट में रीट्लैंग))

थ्रेड ऊपर की अवधारणाओं की तुलना में अपेक्षाकृत कम-स्तरीय अवधारणा हैं। थ्रेड एक प्रक्रिया के भीतर चल रहे कार्य होते हैं, जो ऑपरेटिंग सिस्टम के शेड्यूलर द्वारा समवर्ती रूप से चलते हैं और सीधे प्रबंधित होते हैं। आप समानांतर कार्यान्वित कर सकते हैं जब ऑपरेटिंग सिस्टम प्रत्येक धागे को प्रत्येक थ्रेड पर संदेश कतार, रूटिंग इत्यादि को लागू करके एक अलग कोर, या एक अभिनेता मॉडल को मानचित्र करता है।

+1

के लिए मैं समुदाय विकी के रूप में पोस्ट करें ताकि अन्य लोग ठीक करें और परिष्कृत कर सकते हैं मेरे परिभाषाओं ... –

4

वहाँ भी सहित डेटा समानांतर प्रोग्रामिंग जो ग्राफ़िक प्रोसेसिंग यूनिट (GPU) को लक्षित करने के लिए कुछ नेट पुस्तकालय हैं:

Microsoft Accelerator डेटा समानांतर प्रोग्रामिंग के लिए है और या तो GPU या मल्टी कोर प्रोसेसर लक्षित कर सकते हैं।

Brama GPU शैली डेटा रूपांतरणों के लिए है जो GPU पर चलते हैं।

CUDA.NET एक प्रोग्राम प्रदान करता है ताकि सीयूडीए को .NET कार्यक्रमों से उपयोग किया जा सके।

-1

समांतर करने के दो प्रमुख तरीके धागे और नई कार्य आधारित लाइब्रेरी टीपीएल हैं।

आपके द्वारा उल्लेख किए गए असीमित प्रोग्रामिंग थ्रेडपूल में एक और धागा और कुछ नहीं है।

PLINQ, आरएक्स और दूसरों उल्लेख किया वास्तव में नया कार्य अनुसूचक के शीर्ष पर बैठे विस्तार है।

नए कार्य शेड्यूलर और इसके शीर्ष पर सभी पुस्तकालयों के लिए बिल्कुल नया आर्किटेक्चर समझाते हुए सबसे अच्छा आलेख, विजुअल स्टूडियो 2010 और नया टीपीएल .NET 4.0 कार्य-आधारित समांतरता यहां है (स्टीव टेक्सीरा द्वारा, समांतर के लिए उत्पाद इकाई प्रबंधक माइक्रोसॉफ्ट पर डेवलपर उपकरण):

http://www.drdobbs.com/visualstudio/224400670

अन्यथा डॉ डोब्स समर्पित किया है समानांतर प्रोग्रामिंग यहाँ अनुभाग: समानांतर प्रोग्रामिंग आधारित कहते धागे और नया कार्य के बीच http://www.drdobbs.com/go-parallel/index.jhtml

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

  1. थ्रेड
  2. नई कार्य आधारित, कार्य अनुसूचक:

    तो .NET में वास्तव में आप कई विकल्प नहीं है।

जाहिर आधारित काम जाने का रास्ता है।

चियर्स Valko