mirror of https://gitee.com/openkylin/nodejs.git
41 lines
1.1 KiB
JavaScript
41 lines
1.1 KiB
JavaScript
'use strict';
|
|
require('../common');
|
|
|
|
// This test ensures that the messages from the internal
|
|
// message port are drained before the call to 'kDispose',
|
|
// and so all the stdio messages from the worker are processed
|
|
// in the parent and are pushed to their target streams.
|
|
|
|
const assert = require('assert');
|
|
const {
|
|
Worker,
|
|
isMainThread,
|
|
parentPort,
|
|
threadId,
|
|
} = require('worker_threads');
|
|
|
|
if (isMainThread) {
|
|
const workerIdsToOutput = new Map();
|
|
|
|
for (let i = 0; i < 2; i++) {
|
|
const worker = new Worker(__filename, { stdout: true });
|
|
const workerOutput = [];
|
|
workerIdsToOutput.set(worker.threadId, workerOutput);
|
|
worker.on('message', console.log);
|
|
worker.stdout.on('data', (chunk) => {
|
|
workerOutput.push(chunk.toString().trim());
|
|
});
|
|
}
|
|
|
|
process.on('exit', () => {
|
|
for (const [threadId, workerOutput] of workerIdsToOutput) {
|
|
assert.ok(workerOutput.includes(`1 threadId: ${threadId}`));
|
|
assert.ok(workerOutput.includes(`2 threadId: ${threadId}`));
|
|
}
|
|
});
|
|
} else {
|
|
console.log(`1 threadId: ${threadId}`);
|
|
console.log(`2 threadId: ${threadId}`);
|
|
parentPort.postMessage(Array(100).fill(1));
|
|
}
|