npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

stardust-parallel-js

v3.0.1

Published

Simple parallel execution library for Node.js using Worker Threads. Execute CPU-intensive tasks with thread pools and isolated workers. Supports both regular and arrow functions.

Readme

⚡ stardust-parallel-js

npm version npm downloads License: MIT Coverage Node.js Version TypeScript Bundle Size GitHub stars

Другие языки: English

Библиотека для параллельного выполнения JavaScript/TypeScript функций с использованием Worker Threads в Node.js.

Производительность

Бенчмарки на 4-ядерном CPU:

| Задача | Последовательно | Параллельно (4 потока) | Ускорение | |--------|----------------|------------------------|-----------| | Вычисление Fibonacci(35-42) | 5113 мс | 2606 мс | 1.96x | | Обработка 50 элементов | 936 мс | 344 мс | 2.72x |

Улучшение производительности: до 63% на CPU-интенсивных задачах.

Возможности

  • Реальное ускорение на многоядерных процессорах
  • Простой API для параллельного выполнения задач
  • Пул потоков для эффективного управления ресурсами
  • Поддержка отдельных потоков для разовых задач
  • Полная поддержка TypeScript
  • Автоматическое восстановление упавших потоков
  • Обработка массивов аналогично map(), но параллельно

Установка

npm install stardust-parallel-js
# или
pnpm install stardust-parallel-js
# или
yarn add stardust-parallel-js

Быстрый старт

Пример базового использования:

import { ThreadPool } from 'stardust-parallel-js';

const pool = new ThreadPool(4);

// Последовательное выполнение
const results = data.map(item => heavyComputation(item));

// Параллельное выполнение
const results = await pool.map(data, item => heavyComputation(item));

await pool.terminate();

Использование

ThreadPool - Пул потоков (рекомендуется)

Используйте ThreadPool для обработки множества задач с максимальной эффективностью:

import { ThreadPool } from 'stardust-parallel-js';

// Создаем пул из 4 потоков (по числу ядер CPU)
const pool = new ThreadPool(4);

// Обработка массива параллельно
const numbers = [1, 2, 3, 4, 5, 6, 7, 8];
const squares = await pool.map(numbers, (n: number) => n * n);
console.log(squares); // [1, 4, 9, 16, 25, 36, 49, 64]

// CPU-интенсивные вычисления
const result = await pool.execute(
  (n: number) => {
    let sum = 0;
    for (let i = 0; i < n; i++) {
      sum += Math.sqrt(i);
    }
    return sum;
  },
  [1000000]
);

// Освобождаем ресурсы
await pool.terminate();

Thread - Отдельный поток (для простых задач)

Используйте Thread для разовых операций:

import { Thread } from 'stardust-parallel-js';

// Запустить и дождаться результата
const thread = new Thread(
  (text: string) => text.toUpperCase(),
  ['hello world']
);

const result = await thread.join();
console.log(result); // "HELLO WORLD"

// Стрелочные функции работают!
const thread2 = new Thread(x => x * 2, [21]);
console.log(await thread2.join()); // 42

Примеры

Обработка изображений

import { ThreadPool } from 'stardust-parallel-js';

const pool = new ThreadPool(8);
const images = ['img1.jpg', 'img2.jpg', /* ... */ 'img100.jpg'];

// Обрабатываем 100 изображений параллельно
const processed = await pool.map(images, (path: string) => {
  const fs = require('fs');
  const sharp = require('sharp');
  // Сложная обработка изображения
  return processImage(path);
});

await pool.terminate();

Парсинг больших данных

const pool = new ThreadPool(4);
const chunks = splitDataIntoChunks(bigData, 1000);

// Парсим каждый чунк параллельно
const parsed = await pool.map(chunks, (chunk: any[]) => {
  return chunk.map(item => parseComplexData(item));
});

await pool.terminate();

Вычисления и аналитика

const pool = new ThreadPool(4);

const results = await pool.map([35, 36, 37, 38, 39, 40], n => {
  function fibonacci(num: number): number {
    if (num <= 1) return num;
    return fibonacci(num - 1) + fibonacci(num - 2);
  }
  return fibonacci(n);
});

await pool.terminate();

Бенчмарки

Запуск бенчмарков:

npm run build
npx tsx benchmarks/cpu-intensive.ts
npx tsx benchmarks/data-processing.ts

API Reference

ThreadPool

constructor(size: number)

Создает пул потоков заданного размера.

const pool = new ThreadPool(4);

execute<TArgs, TResult>(fn: (...args: TArgs) => TResult, args?: TArgs): Promise<TResult>

Выполняет функцию в доступном потоке из пула.

const result = await pool.execute(
#### `map<T, R>(items: T[], fn: (item: T) => R): Promise<R[]>`
Применяет функцию к каждому элементу массива параллельно.

```typescript
// Стрелочная функция
const results = await pool.map([1, 2, 3], n => n * 2);

// Обычная функция
const results2 = await pool.map([1, 2, 3], function(n) { return n * 2; });
```# `map<T, R>(items: T[], fn: (item: T) => R): Promise<R[]>`
Применяет функцию к каждому элементу массива параллельно.

```typescript
const results = await pool.map([1, 2, 3], (n) => n * 2);

terminate(): Promise<void>

Останавливает все потоки и освобождает ресурсы.

await pool.terminate();

Thread

constructor<T, TArgs>(fn: (...args: TArgs) => T, args?: TArgs)

Создает новый поток для выполнения функции.

const thread = new Thread((x: number) => x * x, [5]);

join(): Promise<T>

Ожидает завершения выполнения и возвращает результат. Автоматически завершает поток.

const result = await thread.join();

Важные замечания

  • Функции выполняются в изолированном контексте (отдельный Worker Thread)
  • Аргументы и результаты должны быть сериализуемыми
  • Замыкания не работают - функции не имеют доступа к внешним переменным
  • Поддерживаются обычные и стрелочные функции
  • require() доступен внутри функций для использования Node.js модулей
  • Лучше всего подходит для CPU-интенсивных задач (вычисления, обработка данных)
  • Для I/O операций (чтение файлов, сеть) используйте async/await вместо потоков

Когда использовать

Используйте stardust-parallel-js когда:

  • Обрабатываете большие массивы данных
  • Выполняете сложные вычисления
  • Парсите или трансформируете данные
  • Обрабатываете изображения/видео
  • Нужно использовать все ядра CPU

Не используйте когда:

  • Простые операции (быстрее выполнить последовательно)
  • I/O операции (файлы, сеть, БД) - они уже асинхронные
  • Работаете с DOM (только в Node.js)

Выбор размера пула

import os from 'os';

// Оптимально: количество CPU ядер
const pool = new ThreadPool(os.cpus().length);

// Для CPU-интенсивных задач
const pool = new ThreadPool(os.cpus().length - 1); // оставить 1 ядро для системы

// Для смешанной нагрузки
const pool = new ThreadPool(os.cpus().length * 2);

Сравнение с альтернативами

| Решение | Простота | Производительность | TypeScript | Размер | |---------|----------|-------------------|------------|--------| | stardust-parallel-js | Высокая | Высокая | Полная | 9.3kB | | worker_threads | Средняя | Высокая | Частичная | Встроено | | cluster | Средняя | Средняя | Частичная | Встроено | | child_process | Низкая | Низкая | Нет | Встроено |

Roadmap

  • [x] Поддержка transferable objects для больших данных
  • [ ] Автоматический выбор оптимального размера пула
  • [ ] Приоритизация задач
  • [ ] Мониторинг и статистика
  • [ ] Поддержка async функций в потоках

Обратная связь

Нашли баг или есть идея? Создайте issue.

Требования

  • Node.js >= 14.0.0 (с поддержкой Worker Threads)

Лицензия

MIT © b1411