जावास्क्रिप्ट बफर को स्रोत थ्रेड से वर्कर थ्रेड में स्थानांतरित करने की अनुमति देता है। अन्यथा, ऐरेबफर की प्रतिलिपि बनाई जाती है, फिर कार्यकर्ता को पास कर दिया जाता है। स्थानांतरित बफ़र्स स्रोत धागा [1] में सुलभ ("neutered") नहीं हैं:जावास्क्रिप्ट में स्थानांतरित बफर को क्यों स्थानांतरित किया जाता है?
// create data that can be transfered
var arr = new Uint8Array(5);
// outputs: 5
console.log(arr.buffer.byteLength);
var worker = new Worker("some_worker.js");
// transfer the buffer
worker.postMessage({arr: arr}, [arr.buff]);
// the buffer vanishes. is "Neutered"
// outputs: 0
console.log(arr.buffer.byteLength);
मैं unterstand कैसे तंत्र काम करता है। हालांकि मैं उत्सुक हूं कि इसे क्यों पेश किया गया था। पारंपरिक थ्रेडिंग मॉडल की तरह वर्कर थ्रेड के बीच साझा डेटा क्यों नहीं है, जो एकाधिक थ्रेड को स्मृति क्षेत्र तक पहुंचने की अनुमति देता है?
स्पष्टीकरण के लिए एक ही प्रश्न के अन्य phrasings:
क्यों हस्तांतरण पर neutered बफर कर रहे हैं?/इस तंत्र के पीछे तर्क क्या है?/इसे क्यों पेश किया गया था? श्रमिकों के बीच स्मृति क्षेत्रों को क्यों साझा नहीं किया जा सकता है?
मैं विश्वसनीय और/या आधिकारिक स्रोतों से उत्तर खींचने की तलाश में हूं।
[1] https://developer.mozilla.org/en/docs/Web/API/Worker/postMessage
धन्यवाद, मीकल चारेम्ज़ा। मैंने आपकी सजा को प्रश्न में जोड़ा क्योंकि यह सवाल का कारण था। –