2010-02-07 8 views
9

मैं वर्तमान में एक बड़ा बहु थ्रेडेड सी ++ प्रोग्राम (> 50 के एलओसी) लिख रहा हूं।क्या बड़े बहु थ्रेडेड सी ++ प्रोग्रामों में कभी-कभी अनुक्रमिक प्रक्रियाओं का संचार कर रहा है?

जैसे कि मुझे बहु-थ्रेडेड कोड को संभालने के लिए विभिन्न तकनीकों पर बहुत कुछ पढ़ने के लिए प्रेरित किया गया है। एक सिद्धांत यह है मैं काफी शांत हो पाया है:

http://en.wikipedia.org/wiki/Communicating_sequential_processes

और यह एक थोड़ा प्रसिद्ध आदमी, जो समवर्ती प्रोग्रामिंग करने के लिए अन्य गैर तुच्छ योगदान दिया है द्वारा आविष्कार किया है।

हालांकि, सीएसपी अभ्यास में प्रयोग किया जाता है? क्या कोई सीएसपी शैली में लिखे गए किसी भी बड़े आवेदन को इंगित कर सकता है?

धन्यवाद!

+2

lol @ 50 loc जा रहा है बड़े –

+0

[PySCP] (http://code.google .com/p/pycsp /) सीएसपी के व्यवहार्य व्यावहारिक कार्यान्वयन की तरह दिखता है। कुछ उदाहरण शामिल हैं। हालांकि, इस समय यह केवल शैक्षणिक उद्देश्यों के लिए उपयोग किया जाता है। – spacediver

उत्तर

8

सीएसपी, एक प्रक्रिया कैलकुस के रूप में, मूल रूप से एक सैद्धांतिक बात है जो हमें औपचारिक रूप से औपचारिक बनाने और अध्ययन समानांतर कार्यक्रम के कुछ पहलुओं को पढ़ने में सक्षम बनाता है।

आप के बजाय एक सिद्धांत है कि आप निर्माण वितरित कार्यक्रमों के लिए सक्षम बनाता चाहते हैं, तो आप parallel structured programming करने के लिए एक अवलोकन करना चाहिए।

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

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

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

मुझे सैद्धांतिक ध्वनि और व्यावहारिक दोनों उपयोगी समांतर संरचित प्रोग्रामिंग का विचार मिला, इसलिए मैं इसे देखने का सुझाव दूंगा।

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

+1

मजाकिया बात यह है कि सीएसपी अब प्रोग्रामिंग में इस्तेमाल होने वाला सबसे समवर्ती तंत्र है :) – nXqd

0

यह शैली यूनिक्स पर सर्वव्यापी है जहां कई टूल मानक से मानक आउट तक प्रक्रिया करने के लिए डिज़ाइन किए गए हैं। मेरे पास इस तरह के बड़े सिस्टम का पहला हाथ ज्ञान नहीं है, लेकिन मैंने

उदाहरण के लिए यह सरल कमांड लाइन (कम से कम) 3 प्रक्रियाओं का उपयोग करने के लिए कई छोटी-छोटी प्रणालियों को देखा है।

cat list-1 list-2 list-3 | sort | uniq > final.list 
+0

हां, लेकिन पाइपलाइन प्रक्रियाओं के बीच नहीं है, ओपी जैसे धागे के बीच नहीं पूछ रहा है। – Omnifarious

+0

वह जिस पेपर से लिंक करता है वह प्रक्रियाओं के बारे में है। –

+2

एक सिद्धांत के रूप में सीएसपी धागे और कार्यक्रमों के बीच भेद की परवाह नहीं करता है। जैसा कि बताया गया है अभी भी वैध बना हुआ है: सीएसपी सिद्धांत बहु-थ्रेडेड कार्यक्रमों में अभ्यास में प्रयोग किया जाता है? – MSalters

0

इस प्रणाली केवल मामूली आकार है, लेकिन मैं एक प्रोटोकॉल प्रोसेसर दूर स्ट्रिप्स और संदेश है कि बहुत इस के समान एक शैली का इस्तेमाल में प्रोटोकॉल के क्रमिक परतों समझता है कि वह लिखा था। यह सहकारी थ्रेडिंग के समान कुछ का उपयोग कर एक इवेंट संचालित प्रणाली थी, लेकिन मैं कुछ जोड़े गए बदलावों के साथ काफी आसानी से मल्टीथ्रेडिंग का उपयोग कर सकता था।

कार्यक्रम मालिकाना (दुर्भाग्य से) है इसलिए मैं स्रोत कोड नहीं दिखा सकता।

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

0

माइक्रोसॉफ्ट के पास ActiveMovie (यदि मुझे सही याद है) नामक एक तकनीक थी जो ऑडियो और वीडियो स्ट्रीम पर अनुक्रमिक प्रसंस्करण करती थी। इनपुट से आउटपुट प्रारूप (और स्रोत/सिंक) में जाने के लिए डेटा एक फ़िल्टर से दूसरे में पारित हो गया। शायद यह एक व्यावहारिक उदाहरण है ??

+0

वास्तव में नहीं, फ़िल्टरों की श्रृंखला के माध्यम से डेटा को धक्का देने के लिए एक थ्रेड का उपयोग किया जाता है। –

6

हां और नहीं। सीएसपी के मूल विचार का उपयोग काफी हद तक किया जाता है। उदाहरण के लिए, एक या दूसरे रूप में थ्रेड-सुरक्षित कतारों को अक्सर व्यक्तिगत प्रक्रियाओं (थ्रेड) से पाइपलाइन बनाने के लिए प्राथमिक (अक्सर केवल) संचार तंत्र के रूप में उपयोग किया जाता है।

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

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

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

0

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

50,000 लाइन क्लास प्रोग्राम के लिए, आप फिट बैठकर इसे आर्किटेक्टिंग से बेहतर कर सकते हैं।

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

3

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

तो अपने प्रश्न का उत्तर देने के लिए: हाँ, वास्तविक जीवन में बड़ी सॉफ्टवेयर परियोजनाओं पर सीएसपी का उपयोग किया जाता है।

पूर्ण प्रकटीकरण: मैं Verum

के लिए स्वतंत्र काम करने
0

थोड़ा सा विषय से हटकर लेकिन मेरी थीसिस के लिए मैं एक उपकरण के ढांचे TERRA/LUNA कहा जाता है जो एंबेडेड नियंत्रण प्रणालियों के लिए सॉफ्टवेयर विकास के लिए करना है, लेकिन सभी प्रकार के लिए भारी प्रयोग किया जाता है प्रयोग किया जाता है मेरे संस्थान में सॉफ्टवेयर विकास (इसलिए केवल अकादमिक उपयोग)। टेरा एक ग्राफिकल सीएसपी और सॉफ्टवेयर आर्किटेक्चर संपादक है और एलयूएनए सीएसपी आधारित संरचनाओं के लिए सी ++ लाइब्रेरी का नाम है और आपके सीएसपी मॉडल से सी ++ कोड उत्पन्न करने के लिए टीईआरआरए में प्लगइन मिलेगा। यह किसी भी प्रकार के (मृत/जीवन/आदि) लॉक या यहां तक ​​कि प्रोफाइलिंग का पता लगाने के लिए FDR3 (एक सीएसपी परिष्करण जांचकर्ता) के संयोजन में बहुत आसान हो जाता है।

0

एक बहुत पुरानी प्रश्न का उत्तर देना, फिर भी यह महत्वपूर्ण लगता है कि एक

Go जहां सीएसपी भाषा का एक मूलभूत हिस्सा हैं नहीं है। FAQ to Go में, लेखकों लिखें:

कन्करेंसी और मल्टी-थ्रेडेड प्रोग्रामिंग कठिनाई के लिए एक प्रतिष्ठा है। हमारा मानना ​​है कि यह आंशिक रूप से जटिल डिजाइनों जैसे कि pthreads और आंशिक रूप से कम स्तर के विवरण जैसे म्यूटेक्स, हालत चर, और स्मृति बाधाओं पर निर्भर करता है। उच्च स्तरीय इंटरफेस बहुत सरल कोड सक्षम करते हैं, भले ही म्यूटेक्स और कवर के तहत भी हों।

समेकन के लिए उच्च स्तरीय भाषाई समर्थन प्रदान करने के लिए सबसे सफल मॉडल में से एक होरे की संचारिक अनुक्रमिक प्रक्रियाओं या सीएसपी से आता है। ओकम और एरलांग दो प्रसिद्ध भाषाएं हैं जो सीएसपी से निकलती हैं। गो की समवर्ती प्राइमेटिव्स परिवार के पेड़ के एक अलग हिस्से से निकलती हैं जिसका मुख्य योगदान प्रथम श्रेणी की वस्तुओं के रूप में चैनलों की शक्तिशाली धारणा है। कई पूर्व भाषाओं के साथ अनुभव से पता चला है कि सीएसपी मॉडल एक प्रक्रियात्मक भाषा ढांचे में अच्छी तरह से फिट बैठता है।

परियोजनाओं जाओ में लागू कर रहे हैं:

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