कंसीडर में अगला


9

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

लेकिन मैं खुद को जवाब देने में असमर्थ हूं कि आगे क्या होगा? मल्टी-कोर प्रोसेसिंग से संबंधित अधिक कौशल प्राप्त करने के लिए मुझे क्या अतिरिक्त सीखना चाहिए या काम करना चाहिए। अगर कोई अच्छी किताब है (पढ़ी और आनंद ली गई 'अभ्यास में संक्षिप्तता और' जावा में समवर्ती प्रोग्रामिंग ') या संसाधन मल्टी-कोर प्रसंस्करण से संबंधित है ताकि मैं अगले स्तर तक जा सकूं?


यदि आपने सैद्धांतिक नींव को याद किया है, तो उन्हें अभी सीखें: en.wikipedia.org/wiki/Pi-calculus
SK-logic

जवाबों:


8

डिस्क्लेमर - मैं कंसीडर एक्सपर्ट नहीं हूं, लेकिन मेरा को-ऑथर है, मैं उसे मना रहा हूं :-)

जब से आपने डौग ली की और ब्रायन गोएट्ज की किताबें पढ़ी हैं, तब से लेकर आज तक आपने निश्चित रूप से सर्वश्रेष्ठ सामग्री को कवर किया है।

आगे की ओर जा रहे हैं, जावा 7 में नई संगामिति में वृद्धि हुई है। अधिकांश में कांटे / ज्वाइन फ्रेमवर्क और नए अतुल्यकालिक एनआईओ एपीआई शामिल हैं।

जावा 8 लैम्ब्डा / समानांतर संग्रह के साथ आगे के सुधार को शुरू करेगा।

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

[चेतावनी -> स्व विज्ञापन] तो मैं स्वाभाविक रूप से हमारी आने वाली पुस्तक, द वेल-ग्राउंडेड जावा डेवलपर की सिफारिश करूंगा , जिसमें मेरे द्वारा बताई गई सभी चीजें शामिल हैं: -)। [/ चेतावनी]

ऐसा न हो कि मैं भूल जाऊं, ग्रूवी के पास अत्यधिक अनुशंसित Gpars lib है, हालांकि मैंने व्यक्तिगत रूप से इसका उपयोग नहीं किया है।


हा पुस्तक के लिए बहुत बहुत धन्यवाद :)। क्या आप किसी अन्य अच्छी पुस्तक का सुझाव भी दे सकते हैं क्योंकि आपकी अनुशंसित पुस्तक भारत में उपलब्ध नहीं है (स्थानीय संस्करण) ।PS: अभ्यास में संगामिति एक पुस्तक का एक रत्न है
जतिन

@ मर्तिजन, नीट! मैं पिछले कुछ समय से ग्रूवी और स्काला के बारे में उत्सुक था और अधिक जानने के लिए इसके साथ खेलना चाहता था। क्या आपकी पुस्तक इन भाषाओं में शुरुआती लोगों की ओर अग्रसर है या क्या यह पूर्व अनुभव है?
maple_shaft

@ जतिन पुरी - मैं वास्तव में 'कॉन्सेप्ट इन प्रैक्टिस' और 'जावा में समवर्ती प्रोग्रामिंग' पर कोई अन्य शीर्षक नहीं जानता, हेनरी वोंग का 'जावा थ्रेड्स' ओ 'रेली शीर्षक है, लेकिन यह इसके बारे में है।
मार्टिज़न वेरबर्ग

@maple_shift - यह शुरुआती के उद्देश्य से है :-)
Martijn Verburg

2

डी प्रोग्रामिंग भाषा समवर्ती प्रोग्रामिंग के लिए दो प्रतिमान प्रदान करती है, जिसमें दोनों का उपयोग होता है और बल्कि दिलचस्प होते हैं।

std.concurrency बिना किसी डिफ़ॉल्ट मेमोरी शेयरिंग के संदेश पास करने की सुविधा प्रदान करता है। डी में सभी वैश्विक और स्थैतिक चर डिफ़ॉल्ट रूप से थ्रेड-लोकल होते हैं spawnऔर sendउन संदेशों को भेजने की अनुमति नहीं देते हैं जिनमें परस्पर सूचक सूचक अप्रत्यक्ष होते हैं। सीमित शेयरिंग को sharedकीवर्ड के माध्यम से प्राप्त किया जा सकता है , जो कि टाइप सिस्टम द्वारा अतिरिक्त चेकिंग करता है। भाषा की सुरक्षित बोली के बाहर आप __gsharedकीवर्ड का उपयोग करके क्लासिक सी / जावा-शैली के वैश्विक / साझा चर को बाध्य कर सकते हैं , लेकिन सभी दांव तब तक सुरक्षित हैं जब तक दौड़ सुरक्षा। यह मॉडल आंद्रेई अलेक्जेंड्रेस्सु की पुस्तक "द डी प्रोग्रामिंग लैंग्वेज" के एक मुक्त अध्याय में विस्तृत है

std.parallelism कम सुरक्षित है, लेकिन कुछ मायनों में std.concurrency की तुलना में अधिक लचीला है और विशेष रूप से मल्टी-केस डेटा और टास्क समानांतरवाद के लिए सामान्य केस-कॉन्सेप्ट के बजाय डेटा प्रोसेसिंग थ्रूपुट को बढ़ाने के लिए तैयार है। यह एक समानांतर फ़ॉरेस्ट लूप, एसिंक्रोनस फ़ंक्शन कॉल, समानांतर रिडक्शन इत्यादि की सुविधा देता है। यह रेस-सेफ कोड लिखना आसान बनाने के लिए तंत्र प्रदान करता है लेकिन ऐसा करने के लिए अभी भी कुछ हद तक अनुशासन की आवश्यकता होती है।

डी के दो प्रमुख बहुपरत प्रतिमानों के बारे में अधिक गहन चर्चा इस विषय पर मेरे हालिया लेख में मिल सकती है


2

मैं दृढ़ता से सुझाव देता हूँ कि तुम जाओ और क्लोज़र को देखो

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

  • पहचान और राज्य अलग हो जाते हैं - ओओपी वस्तु पहचान की पहचान करता है क्योंकि यह परिवर्तनशील सदस्य चर के रूप में वर्तमान स्थिति है। क्लोझर सख्ती से पहचान (प्रबंधित संदर्भ) और राज्य (अपरिवर्तनीय डेटा संरचनाएं) को इस तरह से अलग करता है कि महत्वपूर्ण विश्वसनीय समवर्ती कार्यक्रमों के विकास को सरल बनाता है।
  • लगातार अपरिवर्तनीय डेटा संरचनाएं - क्योंकि सब कुछ अपरिवर्तनीय है, आप किसी भी समय डेटा / स्थिति का एक स्नैपशॉट ले सकते हैं और आश्वस्त रहें कि यह आपके नीचे उत्परिवर्तित नहीं होगा। लेकिन इससे बेहतर - वे लगातार डेटा संरचनाएं हैं जो पिछले संस्करणों के साथ डेटा साझा करते हैं। नतीजतन, संचालन ओ (एन) के बजाय ओ (1) के बहुत करीब हैं आप अपरिवर्तनीय डेटा के लिए कॉपी-ऑन-राइट रणनीति के लिए भुगतान करेंगे।
  • सॉफ़्टवेयर ट्रांसेक्शनल मेमोरी - ताले का उपयोग करने के बजाय, आप कोड को एक (dosync ...) ब्लॉक में संलग्न करते हैं और वे स्वचालित रूप से एक लेनदेन के रूप में चलते हैं। गतिरोध का कोई जोखिम नहीं है, और जटिल लॉकिंग रणनीतियों को विकसित करने की आवश्यकता नहीं है। यह एक विशाल जीत है, खासकर जब ऊपर की अपरिवर्तनीय डेटा संरचनाओं के साथ संयुक्त। प्रभावी रूप से, क्लोजर अपने एसटीएम में बहु-संस्करण संगामिति नियंत्रण लागू करता है ।
  • कार्यात्मक प्रोग्रामिंग प्रतिमान का उपयोग विश्वसनीय समवर्ती कोड लिखने के लिए बहुत आसान बनाने के लिए किया जाता है। मूल रूप से यदि आप एक अपरिवर्तनीय डेटा संरचना लेते हैं, तो इसे एक शुद्ध फ़ंक्शन के माध्यम से चलाएं और एक अलग अपरिवर्तनीय डेटा संरचना का उत्पादन करें, तो आपका कोड संगामिति के लिए सुरक्षित होने की गारंटी है।

मैं इस वीडियो को एक परिचय के रूप में देखने का सुझाव दूंगा


1

स्काला भाषा पर एक नज़र डालें, जो जावा का विस्तार करती है और जेवीएम पर चलती है। यह एर्लांग से "अभिनेताओं" की धारणा को उधार लेता है, और संगामिति विफलताओं से निपटने की अच्छी क्षमता देता है।


1

यदि आप इसे एक नए स्तर पर ले जाना चाहते हैं, तो आप CUDA के साथ प्रोग्रामिंग में देखना चाहते हैं ।

यह आपको कुछ मुख्य सीपीयू कोर के बजाय अपने ग्राफिक्स कार्ड पर सैकड़ों प्रसंस्करण कोर पर अपने एल्गोरिदम को वितरित करने की अनुमति देता है। यहां तक ​​कि भाषा बाइंडिंग भी हैं जो जाहिरा तौर पर GPGPU तकनीकों का उपयोग करते हुए अजगर जैसी उच्च स्तरीय भाषाओं को गति देना अपेक्षाकृत आसान बनाती हैं ।


@Chiron - ईमानदार होने के लिए, मुझे आश्चर्य था कि किसी और ने पहले ही इसका उल्लेख नहीं किया था।
मार्क बूथ

1

JVM पर प्रोग्रामिंग कंसीडर: मास्टरींग सिंक्रोनाइज़ेशन, एसटीएम, और एक्टर्स स्काला, क्लोजर, जेरी और ग्रूवी में समवर्ती प्रोग्रामिंग पर चर्चा करते हैं।
आपको समवर्ती के लिए अलग-अलग दृष्टिकोणों की बहुत ठोस समझ मिल जाएगी।

तुम्हारी मुस्कान कहां है?

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.