मुझे लगता है कि अन्य सवाल आप संदर्भित कर रहे हैं करने के लिए स्वीकार किए जाते हैं जवाब लिखा है, और उस में मैं तुम्हें कोड की इस पंक्ति के लिए एक सीधा सूचक दे:
message = copy_struct(message, msize, &hp, &bp->off_heap);
यह एक समारोह में कहा जाता है जब Erlang रन -टाइम सिस्टम को एक संदेश भेजने की आवश्यकता होती है, और यह किसी भी प्रकार के "अगर" के अंदर नहीं है जिससे इसे छोड़ दिया जा सकता है। तो, जहां तक मैं कह सकता हूं, जवाब है "हाँ, यह हमेशा कॉपी किया जाता है।" (यही कारण है कि सख्ती से सच नहीं है - वहाँ एक "अगर", लेकिन यह असाधारण मामलों, नहीं सामान्य कोड के प्रवाह पथ के साथ काम कर रहा है।)
(मैं संकर ढेर विकल्प निकोलस द्वारा लाया अनदेखी कर रहा हूँ ऐसा लगता है कि वह सही है, लेकिन चूंकि इस तरह से एर्लांग सामान्य रूप से निर्मित नहीं होता है और इसकी अपनी दंड है, मुझे नहीं लगता कि यह आपकी चिंता का उत्तर देने के तरीके के रूप में विचार करने योग्य है।)
मुझे नहीं पता कि आप 10 GByte/sec को बाधा क्यों मान रहे हैं। कंप्यूटर में रजिस्ट्रार या सीपीयू कैश से कुछ भी कम नहीं होता है, और ऐसी यादें छोटी होती हैं, इस प्रकार खुद को एक प्रकार की बाधा उत्पन्न होती है। इसके अलावा, आपके द्वारा प्रस्तावित शून्य-प्रतिलिपि विचार को बहु-कोर सिस्टम में गुजरने वाले क्रॉस-सीपीयू संदेश के मामले में लॉकिंग की आवश्यकता होगी, जो एक बाधा भी है। हम इस प्रक्रिया में एक बार अन्य प्रक्रिया के संदेश कतार में संदेश की प्रतिलिपि बनाने के लिए लॉकिंग जुर्माना दे रहे हैं; बाद में भुगतान क्यों करें जब यह प्रक्रिया संदेश पढ़ने के लिए हो जाती है?
नीचे की रेखा, मुझे नहीं लगता कि इसे तेजी से जाने के तरीकों के आपके विचार वास्तव में बहुत मदद करेंगे।
स्रोत
2010-08-04 21:15:33
हां, गैर-एसएमपी वीएम में हाइब्रिड और शेर मॉडल संभव थे, लेकिन अत्यधिक लॉकिंग और एसएमपी में कचरे के साथ मुद्दों के कारण ये मॉडल निषिद्ध रूप से धीमे और बनाए रखने में कठोर थे, इसलिए उन्हें गिरा दिया गया। – gleber