2011-10-07 15 views
21

मैं कुछ कैनोनिकल, सरल समवर्ती समस्याओं की तलाश में हूं, जो समवर्ती कंप्यूटेशंस के लिए लाइब्रेरी के उपयोग को प्रदर्शित करने के लिए उपयुक्त हैं।समवर्ती कार्यक्रमों की "हैलो वर्ल्ड" क्या है?

"सहमति" से मेरा क्या मतलब है यह स्पष्ट करने के लिए: मुझे एल्गोरिदम में रूचि है जो गैर-निर्धारक संचार प्रक्रियाओं का उपयोग करते हैं, उदाहरण में नहीं एकाधिक प्रोसेसर पर काम फैलाने से क्विकॉर्ट जैसे तेजी से चलने वाले एल्गोरिदम बनाते हैं। This यह है कि मैं इस शब्द का उपयोग कैसे कर रहा हूं।

मुझे Dining Philosophers Problem के बारे में पता है, और यह स्वीकार्य होगा, लेकिन मुझे आश्चर्य है कि क्या कोई और अधिक विश्वसनीय लेकिन समान रूप से सरल समस्याएं हैं।

उत्तर

6

मैं आमतौर पर एक साधारण "बैंक खाता हस्तांतरण" परिदृश्य का उपयोग करता हूं। उदाहरण के लिए मैंने this question on transactions में ऐसा एक मामूली मामला पोस्ट किया।

  • हर कोई व्यापार समस्या को समझता है:

    यह प्रदर्शनी के लिए एक अच्छा मामला कारण है।

  • यह एक समवर्ती वातावरण में लेनदेन के आयात पर जोर देता है।
  • आप आसानी से परिदृश्य का विस्तार कर सकते हैं (जैसे कि यदि आप सभी मौजूदा खाते में शेष राशि का योग की गणना करते हुए लेन-देन हो रहा है? चाहते हैं)

अपने संगामिति पुस्तकालय प्रदर्शित करने के लिए, तो आप शायद एक धागा चल रहा शुरू कर सकता है इस तरह के परिदृश्य में लाखों लेन-देन, और यह दर्शाते हैं कि अन्य धागे अभी भी दुनिया के निरंतर दृश्य को कैसे देख सकते हैं।

+0

धन्यवाद! हालांकि यह थोड़ा सूखा है, मुझे लगता है कि यह अब तक का सबसे अच्छा जवाब है। – jberryman

3

मुझे नहीं लगता कि यह समेकन कार्यक्रमों के लिए "हैलो वर्ल्ड" जैसे काम करने के लिए एक मानक पहला कार्यक्रम है।

समवर्तीता के लिए अधिक विशिष्ट प्रोग्राम ऐसे प्रोग्राम हैं जो समस्याओं का प्रदर्शन करते हैं, उदाहरण के लिए समवर्ती काउंटर जो उचित सिंक्रनाइज़ेशन के बिना कुछ मायने रखता है। या बैंक खातों के बीच यादृच्छिक स्थानान्तरण जो लॉकिंग को निष्क्रिय रूप से किया जाता है, तो डेडलॉक का कारण बनता है। (मैंने जावा कंसुरेंसी के साथ खेलते समय इन्हें किया था।)

एक चीज जो समरूपता को प्रदर्शित करती है और अपेक्षाकृत सरल है सहकारी रूप से गिनती है: समवर्ती धागे (या जो भी) में एक आंतरिक काउंटर होता है, जिसे वे एक दूसरे को भेजते हैं, और उन्हें प्लस वन प्राप्त करने के लिए सेट करें। (मैंने कुछ साल पहले इन्फ्रारेड पर तीन लेगो मिंडस्टॉर्म आरसीएक्स के साथ ऐसा किया था, अच्छी तरह से काम किया।)

बीटीडब्लू: एम्बेडेड प्रोग्रामर की "हैलो वर्ल्ड" ब्लिंकिंग एलईडी है।

+2

विशेष रूप से यदि आप मोर्स में "हेल्लो वर्ल्ड" को झपकी देते हैं। –

1

आप विभिन्न धागे में "हैलो" और "वर्ल्ड" का पता लगा सकते हैं। या "हैलो" एनिमेट करें जबकि "वर्ल्ड" रेट्रैसिंग है।

3

वहां एक नमूना जावा एप्लेट (काफी संभवतः अभी भी है) होता था जिसे आप परीक्षण करने के लिए उपयोग करते थे अपने JVM और अंतर्निहित ओएस उपयोग एल्गोरिदम। यह एनिमेटेड दो (या वैकल्पिक रूप से अधिक? याद नहीं कर सकता) सलाखों को धीरे-धीरे भरना, प्रत्येक एक समान थ्रेड द्वारा एक ही प्राथमिकता से एनिमेटेड।

एक बराबर है कि प्रिंट:

red 1 
red 2 
green 1 
red 3 
green 2 

आदि कंसोल के लिए, "हैलो दुनिया" के नंगे हड्डियों प्रकृति के भावना में निकटतम बात होने के लिए मुझे लगता है। यही है, "क्या मैं कंप्यूटर को बेकार लेकिन दृश्यमान कर सकता हूं?"

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

फिर यदि आपका समवर्ती मॉडल सहकारी (या तो नियोलिथिक धागे, या शायद कुछ सह-नियमित-आधारित) है, तो आपको हरी बार शुरू होने से पहले लाल बार भरने से रोकने के लिए उपयुक्त उपज भी जोड़नी होगी। यह आपको बताता है कि आपने सफलतापूर्वक अपना समवर्ती कोड इंटरलीव बनाया है।

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