Javascript consente il trasferimento dei buffer da un thread di origine a un thread di lavoro. Altrimenti, ArrayBuffer viene copiato, quindi passato al lavoratore. buffer trasferiti non sono accessibili ("castrati") in [1] il filo fonte:perché i buffer trasferiti sono sterilizzati in javascript?
// 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);
I Unterstand come funziona il meccanismo. Sono comunque curioso del perché è stato presentato. Perché i dati condivisi tra thread di lavoro non sono condivisi, come in un modello di threading tradizionale, che consente a più thread di accedere alla stessa area di memoria ?
Altri fraseggi della stessa domanda di chiarimento:
Perché sono il Buffer castrati sul trasferimento?/Qual è il ragionamento dietro questo meccanismo?/Perché è stato introdotto? Perché le regioni di memoria non possono essere condivise tra i lavoratori?
Sto cercando una risposta da fonti credibili e/o ufficiali.
[1] https://developer.mozilla.org/en/docs/Web/API/Worker/postMessage
Grazie, Michal Charemza. Ho aggiunto la tua frase alla domanda in quanto questo era il motivo della domanda. –