Производительность ввода / вывода в рабочих потоках Node.js - PullRequest
0 голосов
/ 04 октября 2018

Вот пример с рабочим потоком, который занимает ~ 600 мс на локальной машине для синхронного ввода-вывода:

const fs = require('fs');
const { isMainThread, Worker, parentPort, workerData } = require('worker_threads');

const filename = './foo.txt';

if (isMainThread) {
    (async () => {
        console.time('!');

        await new Promise((resolve, reject) => {
            const worker = new Worker(__filename, { workerData: filename });

            worker.on('message', resolve);
            worker.on('error', reject);
            worker.on('exit', (code) => {
                if (code !== 0)
                    reject(new Error(`Worker stopped with exit code ${code}`));
            });
        });

        console.timeEnd('!');   
    })().catch(console.error);
} else {
    for (let i = 0; i < 100; i++)
        fs.readFileSync(workerData);

    parentPort.postMessage('ok');
}

Тот же пример с одиночным потоком занимает ~ 2 с для асинхронного ввода-вывода:

const fs = require('fs');

const filename = './foo.txt';

console.time('worker');

(function read(i) {
    if (i < 100) {
        fs.readFile(filename, () => read(++i));
        return;
    }

    console.timeEnd('worker');  
})(0);

Очевидно, что синхронная блокировка здесь более эффективна.

Node.js ссылка на рабочий поток состояния:

Рабочие полезны для выполнения CPU-интенсивные операции JavaScript;не используйте их для ввода-вывода, поскольку встроенные механизмы Node.js для асинхронного выполнения операций уже обрабатывают его более эффективно, чем рабочие потоки.

На чем основано это утверждение?

В чем разница между основным и рабочим потоками в отношении ввода-вывода?

Разве цель работника - не ограничиваться неблокирующими асинхронными операциями?

Чтообстоятельства, при которых производительность ввода-вывода может быть менее эффективной в рабочих потоках?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...