Рубрики
Без рубрики

Используйте несколько потоков в узле, как профессионал

Программы, занимающиеся трудоемкими и интенсивным программным обеспечением, не могут быть запускаются в основной ветке. С Пискиной, создайте … Tagged с узлом, JavaScript, программирование.

Программы, занимающиеся трудоемкими и интенсивным программным обеспечением, не могут быть запускаются в основной ветке. С Piscina создайте новые потоки с абсолютной легкостью.

Почему ты должен заботиться?

При создании API -интерфейсов у большинства из нас есть хэширующие пароли, прежде чем хранить его в нашей базе данных (если вы этого не сделали … пожалуйста, сделайте это). Мы часто склонны слегка на нашем хэшировании, чтобы это не влияло на производительность. С несколькими потоками это может быть сделано отдельно, не блокируя основной поток и не оставляя пользователя висеть.

Пример

Давайте настроим проект NPM:

npm init -y

Установите Piscina:

npm i piscina

Создать index.js Файл и добавьте следующий код:

const path = require('path');
const Piscina = require('piscina');

const piscina = new Piscina({
  filename: path.resolve(__dirname, 'worker.js')
});

(async function() {
  const result = await piscina.runTask({ a: 4, b: 6 });
  console.log(result);  // Prints 10
})();

Мы создали новый Работник Пискина и прошел по абсолютному пути к работнику. Затем, в асинхронной функции, мы выделили задачу нашему работнику.

Теперь для нашего работника …. давайте создадим Worker.js файл:

module.exports = ({ a, b }) => {
  return a * b;
};

Наши работники также могут быть Обещание Анкет

const { promisify } = require('util');
// Make setTimeout() a promise
const timer = promisify(setTimeout);

module.exports = async ({ a, b }) => {
  // Fake some async code
  await timer(() => {
    console.log('1 second later');
  } ,1000);

  return a * b;
};

То, что мы видели, довольно просто и не очень трудно реализовать самостоятельно …. Вот где Пистина начинает сиять:

  • Эффективная связь между потоками
  • Отмена задач
  • Задержка доступности
  • Пользовательские очереди задач
  • Статика для пробега и времени ожидания
  • Асинхронный отслеживание
  • Поддержка TypeScript (Yay!), Common JS и ESM

Мы посмотрим на большую часть этого на протяжении всего поста.

Отмена

Для этого нам нужно использовать События упаковка…. Это происходит по умолчанию, поэтому не нужно ничего устанавливать. Пакет событий дает нам EventEmitter который мы можем использовать для отправки событий. Наш работник слушает прервать Событие, прекращает выполнение и бросает ошибку, чтобы сообщить нам, что она была успешно отменена.

const path = require('path');
const Piscina = require('piscina');
const EventEmitter = require('events');

const piscina = new Piscina({
    filename: path.resolve(__dirname, './worker.js'),
});

(async function () {
    const eventEmitter = new EventEmitter();

    try {
        const task = piscina.runTask({ a: 4, b: 5 });

        eventEmitter.emit('abort');
        await task;
    } catch (error) {
        console.log('Task cancelled');
    }
})();

Если вы внимательно посмотрите, вы обнаружите, что мы не сразу ожидали нашей задачи. Если мы этого не сделаем, то к тому времени, когда прервать Событие испускается, задача закончила бы выполнение.

Это ни в коем случае не полный список того, что может сделать Пискина …. Проверьте официальные документы Здесь Анкет

Вот и все, я надеюсь, что вам понравился этот пост. Если вам это понравилось, и следуйте за мной. Пока 👋

Оригинал: “https://dev.to/akashshyam/use-multiple-threads-in-node-like-a-pro-2ogk”