для этого я создал очень простой тест с 2 рабочими потоками. PrettyPrint-Override ">
Код: Выделить всё
const { Worker } = require('node:worker_threads');
const shared = new SharedArrayBuffer(4);
const sync = new Int32Array(shared);
sync[0] = 0;
new Worker('./waiter.js', { workerData: shared });
new Worker('./notifier.js', { workerData: shared });
Код: Выделить всё
const { workerData } = require('node:worker_threads');
const sync = new Int32Array(workerData);
let last = 0;
setInterval(() => {
//while (true) {
console.log('[waiter] Waiting for', last);
Atomics.wait(sync, 0, last);
last = Atomics.load(sync, 0);
console.log('[waiter] Woke up! New value:', last);
//}
}, 0);
Код: Выделить всё
const { workerData } = require('node:worker_threads');
const sync = new Int32Array(workerData);
let value = 1;
setInterval(() => {
console.log('[notifier] Stored and notifying');
Atomics.store(sync, 0, value++);
Atomics.notify(sync, 0);
}, 1000);
Код: Выделить всё
const { workerData } = require('node:worker_threads');
const sync = new Int32Array(workerData);
let last = 0;
function loop() {
console.log('[waiter] Waiting for', last);
Atomics.wait(sync, 0, last);
last = Atomics.load(sync, 0);
console.log('[waiter] Woke up! New value:', last);
loop();
}
loop();
Подробнее здесь: https://stackoverflow.com/questions/797 ... -on-stdout
Мобильная версия