1970 से लेकर लगभग 2002 के प्रोसेसर हर 18 महीनों में लगभग दोगुने हो गए। तो एक प्रोग्रामर के रूप में आप सभी को इंतजार करना था और आपका कार्यक्रम तेजी से आगे बढ़ेगा। समस्या यह है कि 2002 के आसपास नियम बदल गए। अब वे बड़े तेज प्रोसेसर नहीं बना रहे हैं, वे छोटे धीमे प्रोसेसर बना रहे हैं, लेकिन उन्हें समूहों में बाहर कर रहे हैं। अब मैं जिस कंप्यूटर पर काम कर रहा हूं, उसमें 4 कोर हैं, और 8 कोर (और प्रति कोर 4 धागे) के साथ चिप्स मौजूद हैं। जल्द ही हमारे पास बहुत अधिक कोर के साथ चिप्स होंगे।
इसलिए यदि आप एक प्रोग्राम लिखते हैं जो बिल्कुल समवर्ती नहीं है, तो आप पाएंगे कि आप 1 कोर या थ्रेड का उपयोग कर रहे हैं, लेकिन बाकी सीपीयू वहाँ बैठकर कुछ भी नहीं कर रहा है। तो अगर आपके पास 16 कोर 1 है तो आप अपना प्रोग्राम चलाएंगे और बाकी 15 वहीं बैठे हैं!
समवर्ती के साथ समस्या यह है कि यह गैर नियतात्मक है। यह कहना है कि आप बिल्कुल नहीं जानते कि विभिन्न धागे किस क्रम में चीजें करेंगे। परंपरागत रूप से प्रोग्रामर ने ताले और इस तरह का उपयोग करके इसे हल करने की कोशिश की है। इससे बहुत दर्द होता है। परिवर्तनशील अवस्था के कुछ ऐसे रूप होने से जो एक से अधिक धागे तक स्वतंत्र रूप से पहुंच सकते हैं, अक्सर दर्द और हेस्नेबग्स के लिए एक सूत्र है!
देर से प्रवृत्ति उन कार्यात्मक भाषाओं की ओर बढ़ रही है, जो परस्पर अवस्था को नियंत्रित करती हैं। दो बुनियादी तरीके हैं जो कार्यात्मक भाषाएं संगामिति संभालती हैं। पहला संदेश पासिंग का उपयोग करके है। यह एरलांग द्वारा सबसे अच्छा दिखाया गया है। Erlang में प्रक्रियाओं के बीच सामान्य रूप से साझा राज्य नहीं है। वे स्मृति साझा करने से नहीं बल्कि मेरे गुजरने वाले संदेशों से संवाद करते हैं। यह आपको समझ में आना चाहिए क्योंकि हम इसे अभी कर रहे हैं। मैं यह जानकारी आपको एक संदेश भेजकर दे रहा हूं, न कि आप इसे मेरे दिमाग से याद करके! अधिकतर लॉकिंग बग्स को संदेश के लिए स्विच करने से बस चली जाती है। इसके अलावा संदेशों को नेटवर्क के साथ-साथ एक नोड के भीतर पारित किया जा सकता है।
दूसरी विधि एसटीएम है, जो सॉफ्टवेयर ट्रांसक्रिप्शनल मेमोरी के लिए है, यह क्लोजर और हास्केल (और अन्य) में मौजूद है। एसटीएम मेमोरी में साझा किया जाता है लेकिन परिवर्तन केवल लेनदेन के माध्यम से किया जा सकता है। जैसा कि डेटाबेस के लोगों ने यह सारा सामान 1970 में खोजा, यह सुनिश्चित करना बहुत आसान है कि हम इसे सही समझें।
वास्तव में मैंने थोड़ा सा सरलीकरण किया, क्लोजर और हास्केल दोनों संदेश पारित कर सकते हैं, और एर्लैंग एसटीएम कर सकते हैं।
अस्वीकरण मैं एरलांग के साथ प्रोग्रामिंग वेब सर्विसेज का लेखक हूं , जो अगले कुछ हफ्तों में प्रारंभिक रिलीज में बाहर हो जाएगा।