Implement multi-threading support for most of the API. Thanks to Stephen Belanger for reviewing this change in its original form, to Olivia Hugger for reviewing the documentation and some of the tests coming along with it, and to Alexey Orlenko and Timothy Gu for reviewing other parts of the tests. Refs: https://github.com/ayojs/ayo/pull/110 Refs: https://github.com/ayojs/ayo/pull/114 Refs: https://github.com/ayojs/ayo/pull/117 PR-URL: https://github.com/nodejs/node/pull/20876 Reviewed-By: Gireesh Punathil <gpunathi@in.ibm.com> Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com> Reviewed-By: Shingo Inoue <leko.noor@gmail.com> Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: Tiancheng "Timothy" Gu <timothygu99@gmail.com> Reviewed-By: John-David Dalton <john.david.dalton@gmail.com> Reviewed-By: Gus Caplan <me@gus.host>
29 lines
845 B
JavaScript
29 lines
845 B
JavaScript
// Flags: --expose-gc --experimental-worker
|
|
'use strict';
|
|
|
|
const common = require('../common');
|
|
const assert = require('assert');
|
|
const { Worker } = require('worker');
|
|
|
|
{
|
|
const sharedArrayBuffer = new SharedArrayBuffer(12);
|
|
const local = Buffer.from(sharedArrayBuffer);
|
|
|
|
const w = new Worker(`
|
|
const { parentPort } = require('worker');
|
|
parentPort.on('message', ({ sharedArrayBuffer }) => {
|
|
const local = Buffer.from(sharedArrayBuffer);
|
|
local.write('world!', 6);
|
|
parentPort.postMessage('written!');
|
|
});
|
|
`, { eval: true });
|
|
w.on('message', common.mustCall(() => {
|
|
assert.strictEqual(local.toString(), 'Hello world!');
|
|
global.gc();
|
|
w.terminate();
|
|
}));
|
|
w.postMessage({ sharedArrayBuffer });
|
|
// This would be a race condition if the memory regions were overlapping
|
|
local.write('Hello ');
|
|
}
|