Javascript позволяет переносить буферы из исходного потока в поток Worker. В противном случае массив ArrayBuffer будет скопирован, а затем передан работнику. Переданные буферы недоступны ( "стерилизованы" ) в исходном потоке [1]:
// 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);
Я не понимаю, как работает механизм. Мне любопытно, почему он был представлен. Почему данные не разделяются между рабочими потоками, как в традиционной модели потоков, которая позволяет нескольким потокам обращаться к тем же область памяти?
Другие фразы того же вопроса для разъяснения:
Почему буфер перекачивается при передаче?/Какова причина этого механизма?/Почему это было введено? Почему не могут быть разделены области памяти между рабочими?
Я ищу ответ из достоверных и/или официальных источников.
[1] https://developer.mozilla.org/en/docs/Web/API/Worker/postMessage