2016-03-11 9 views
6

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

यह क्यों है? मुख्य समस्याएं क्या हैं? क्या उत्परिवर्तन कुंजी है, या यह स्मॉलटॉक के लिए कुछ और विशिष्ट है?

उत्तर

5

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

समांतर कंप्यूटिंग के लिए थ्रेड-सुरक्षित कोड की आवश्यकता होती है; अन्यथा दौड़ की स्थिति हर समय उभर जाएगी। समस्या यह है कि स्मॉलटाक कोड थ्रेड-सुरक्षित बनाना हर जगह जटिलता जोड़ देगा। उदाहरण के लिए

OrderedCollection >> addLast: anObject 
    lastIndex = array size ifTrue: [self makeRoomAtLast]. 
    lastIndex := lastIndex + 1. 
    ^array at: lastIndex put: newObject 

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

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

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

+0

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

+0

@IraBaxter बिल्कुल। मैं बस यह इंगित करना चाहता था कि समांतरता की एक छोटी राशि ठीक है और समस्या तब आती है जब आप इसे और अधिक लेना चाहते हैं। –

1

कठिनाई? कोई नहीं

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

असल में समानांतरता की सबसे कठिन चीज लोगों को इसका उपयोग करना है। आज के हार्डवेयर अनुप्रयोगों के साथ शायद ही कभी एक कोर का 100% मारा जाता है। मैंने मुश्किल से फारो को 10% से ऊपर नहीं बनाया है।

कई प्रोग्रामिंग गतिशील प्रोग्रामिंग भाषाओं की तरह स्मॉलटाक एक डेवलपर प्रदर्शन भाषा है और एप्लिकेशन प्रदर्शन भाषा नहीं है।

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

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

पायथन की समांतर पुस्तकालय सभी सी/सी ++ आधारित हैं।

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

हार्डवेयर स्वयं ही आजकल जटिल है। भाषा आपकी चिंताओं का कम से कम है।

तो स्मॉलटॉक में पूरी तरह से संभव है लेकिन स्पष्ट रूप से इसमें बहुत से लोग रुचि रखते हैं। मैंने फारो मेलिंग सूचियों में समांतरता पर प्रश्न देखा है कि मैं अक्सर पिछले 2 वर्षों में, शायद एक या दो बार। और यहां तक ​​कि सहमति के लिए किसी के लिए इसके बारे में कोई सवाल पूछना बहुत दुर्लभ है।

+0

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

+0

'फारो उदाहरण और उन्हें सॉकेट के माध्यम से संवाद करना है या अपने अंतिम डेटा को एक सामान्य फ़ाइल में सहेजना है।' आपको यह सोचने के लिए पागल होना होगा कि यह बहुप्रचार के लिए एक सुखद दृष्टिकोण है। – Alexander

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