stardust-parallel-js 1.0.1 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +177 -104
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -2
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,26 +1,40 @@
|
|
|
1
|
-
# parallel
|
|
1
|
+
# ⚡ stardust-parallel-js
|
|
2
2
|
|
|
3
3
|
[](https://www.npmjs.com/package/stardust-parallel-js)
|
|
4
4
|
[](https://www.npmjs.com/package/stardust-parallel-js)
|
|
5
5
|
[](https://opensource.org/licenses/MIT)
|
|
6
|
-
[](https://github.com/b1411/parallel
|
|
6
|
+
[](https://github.com/b1411/stardust-parallel-js)
|
|
7
7
|
[](https://nodejs.org)
|
|
8
8
|
[](https://www.typescriptlang.org/)
|
|
9
|
-
[](https://www.npmjs.com/package/stardust-parallel-js)
|
|
10
|
+
[](https://github.com/b1411/stardust-parallel-js)
|
|
11
|
+
|
|
12
|
+
**Ускорьте свои Node.js приложения до 3x** с помощью простого API для параллельного выполнения задач!
|
|
11
13
|
|
|
12
14
|
Библиотека для параллельного выполнения JavaScript/TypeScript функций с использованием Worker Threads в Node.js.
|
|
13
15
|
|
|
14
|
-
##
|
|
16
|
+
## 🚀 Производительность
|
|
17
|
+
|
|
18
|
+
Реальные бенчмарки на 4-ядерном CPU:
|
|
19
|
+
|
|
20
|
+
| Задача | Последовательно | Параллельно (4 потока) | Ускорение |
|
|
21
|
+
|--------|----------------|------------------------|-----------|
|
|
22
|
+
| **Вычисление Fibonacci(35-42)** | 5113 мс | 2606 мс | **1.96x** 🔥 |
|
|
23
|
+
| **Обработка 50 элементов** | 936 мс | 344 мс | **2.72x** ⚡ |
|
|
15
24
|
|
|
16
|
-
|
|
17
|
-
- 🔄 Пул потоков для эффективного управления ресурсами
|
|
18
|
-
- 🚀 Отдельные потоки для разовых задач
|
|
19
|
-
- 📦 TypeScript поддержка из коробки
|
|
20
|
-
- 🛡️ Автоматическое восстановление упавших потоков
|
|
21
|
-
- ⚡ Асинхронная обработка задач с очередью
|
|
25
|
+
> 💡 **Результат**: до **63% улучшения** производительности на CPU-интенсивных задачах!
|
|
22
26
|
|
|
23
|
-
##
|
|
27
|
+
## ✨ Возможности
|
|
28
|
+
|
|
29
|
+
- 🚀 **До 3x быстрее** - реальное ускорение на многоядерных процессорах
|
|
30
|
+
- 💡 **Простой API** - начните использовать за 2 минуты
|
|
31
|
+
- 🔄 **Пул потоков** - эффективное управление ресурсами
|
|
32
|
+
- ⚡ **Отдельные потоки** - для разовых задач
|
|
33
|
+
- 📦 **TypeScript** - полная поддержка из коробки
|
|
34
|
+
- 🛡️ **Надежность** - автоматическое восстановление упавших потоков
|
|
35
|
+
- 🎯 **Простота** - работает как обычный `map()`, но параллельно
|
|
36
|
+
|
|
37
|
+
## 📦 Установка
|
|
24
38
|
|
|
25
39
|
```bash
|
|
26
40
|
npm install stardust-parallel-js
|
|
@@ -28,25 +42,48 @@ npm install stardust-parallel-js
|
|
|
28
42
|
pnpm install stardust-parallel-js
|
|
29
43
|
# или
|
|
30
44
|
yarn add stardust-parallel-js
|
|
31
|
-
yarn add parallel.js
|
|
32
45
|
```
|
|
33
46
|
|
|
34
|
-
##
|
|
47
|
+
## 🎯 Быстрый старт
|
|
48
|
+
|
|
49
|
+
**За 30 секунд** вы можете ускорить обработку массивов в 2-3 раза:
|
|
35
50
|
|
|
36
|
-
|
|
51
|
+
```typescript
|
|
52
|
+
import { ThreadPool } from 'stardust-parallel-js';
|
|
53
|
+
|
|
54
|
+
const pool = new ThreadPool(4);
|
|
37
55
|
|
|
38
|
-
|
|
56
|
+
// Обычный код - медленно 🐌
|
|
57
|
+
const results = data.map(item => heavyComputation(item));
|
|
58
|
+
|
|
59
|
+
// С stardust-parallel-js - быстро! ⚡
|
|
60
|
+
const results = await pool.map(data, item => heavyComputation(item));
|
|
61
|
+
|
|
62
|
+
await pool.terminate();
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
**Вот и всё!** Ваш код теперь работает параллельно на всех ядрах процессора.
|
|
66
|
+
|
|
67
|
+
## 📚 Использование
|
|
68
|
+
|
|
69
|
+
### ThreadPool - Пул потоков (рекомендуется)
|
|
70
|
+
|
|
71
|
+
Используйте `ThreadPool` для обработки множества задач с максимальной эффективностью:
|
|
39
72
|
|
|
40
73
|
```typescript
|
|
41
|
-
import { ThreadPool } from 'parallel
|
|
74
|
+
import { ThreadPool } from 'stardust-parallel-js';
|
|
42
75
|
|
|
43
|
-
// Создаем пул из 4 потоков
|
|
76
|
+
// Создаем пул из 4 потоков (по числу ядер CPU)
|
|
44
77
|
const pool = new ThreadPool(4);
|
|
45
78
|
|
|
46
|
-
//
|
|
79
|
+
// 🎯 Обработка массива - как обычный map(), но параллельно!
|
|
80
|
+
const numbers = [1, 2, 3, 4, 5, 6, 7, 8];
|
|
81
|
+
const squares = await pool.map(numbers, (n: number) => n * n);
|
|
82
|
+
console.log(squares); // [1, 4, 9, 16, 25, 36, 49, 64]
|
|
83
|
+
|
|
84
|
+
// 💪 CPU-интенсивные вычисления
|
|
47
85
|
const result = await pool.execute(
|
|
48
86
|
(n: number) => {
|
|
49
|
-
// Тяжелые вычисления
|
|
50
87
|
let sum = 0;
|
|
51
88
|
for (let i = 0; i < n; i++) {
|
|
52
89
|
sum += Math.sqrt(i);
|
|
@@ -56,43 +93,93 @@ const result = await pool.execute(
|
|
|
56
93
|
[1000000]
|
|
57
94
|
);
|
|
58
95
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
// Параллельная обработка массива
|
|
62
|
-
const numbers = [1, 2, 3, 4, 5, 6, 7, 8];
|
|
63
|
-
const squares = await pool.map(numbers, (n: number) => n * n);
|
|
64
|
-
console.log(squares); // [1, 4, 9, 16, 25, 36, 49, 64]
|
|
65
|
-
|
|
66
|
-
// Не забудьте остановить пул
|
|
96
|
+
// Освобождаем ресурсы
|
|
67
97
|
await pool.terminate();
|
|
68
98
|
```
|
|
69
99
|
|
|
70
|
-
### Thread - Отдельный поток
|
|
100
|
+
### Thread - Отдельный поток (для простых задач)
|
|
71
101
|
|
|
72
|
-
Используйте `Thread` для разовых
|
|
102
|
+
Используйте `Thread` для разовых операций:
|
|
73
103
|
|
|
74
104
|
```typescript
|
|
75
|
-
import { Thread } from 'parallel
|
|
105
|
+
import { Thread } from 'stardust-parallel-js';
|
|
76
106
|
|
|
77
|
-
//
|
|
107
|
+
// Запустить и дождаться результата
|
|
78
108
|
const thread = new Thread(
|
|
79
|
-
(text: string) =>
|
|
80
|
-
return text.toUpperCase();
|
|
81
|
-
},
|
|
109
|
+
(text: string) => text.toUpperCase(),
|
|
82
110
|
['hello world']
|
|
83
111
|
);
|
|
84
112
|
|
|
85
|
-
// Ждем результат
|
|
86
113
|
const result = await thread.join();
|
|
87
114
|
console.log(result); // "HELLO WORLD"
|
|
88
115
|
|
|
89
|
-
// Стрелочные функции
|
|
116
|
+
// Стрелочные функции работают!
|
|
90
117
|
const thread2 = new Thread(x => x * 2, [21]);
|
|
91
|
-
|
|
92
|
-
|
|
118
|
+
console.log(await thread2.join()); // 42
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
## 💡 Примеры из реальной жизни
|
|
122
|
+
|
|
123
|
+
### Обработка изображений
|
|
124
|
+
|
|
125
|
+
```typescript
|
|
126
|
+
import { ThreadPool } from 'stardust-parallel-js';
|
|
127
|
+
|
|
128
|
+
const pool = new ThreadPool(8);
|
|
129
|
+
const images = ['img1.jpg', 'img2.jpg', /* ... */ 'img100.jpg'];
|
|
130
|
+
|
|
131
|
+
// Обрабатываем 100 изображений параллельно
|
|
132
|
+
const processed = await pool.map(images, (path: string) => {
|
|
133
|
+
const fs = require('fs');
|
|
134
|
+
const sharp = require('sharp');
|
|
135
|
+
// Сложная обработка изображения
|
|
136
|
+
return processImage(path);
|
|
137
|
+
});
|
|
138
|
+
|
|
139
|
+
await pool.terminate();
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
### Парсинг больших данных
|
|
143
|
+
|
|
144
|
+
```typescript
|
|
145
|
+
const pool = new ThreadPool(4);
|
|
146
|
+
const chunks = splitDataIntoChunks(bigData, 1000);
|
|
147
|
+
|
|
148
|
+
// Парсим каждый чунк параллельно
|
|
149
|
+
const parsed = await pool.map(chunks, (chunk: any[]) => {
|
|
150
|
+
return chunk.map(item => parseComplexData(item));
|
|
151
|
+
});
|
|
152
|
+
|
|
153
|
+
await pool.terminate();
|
|
93
154
|
```
|
|
94
155
|
|
|
95
|
-
|
|
156
|
+
### Вычисления и аналитика
|
|
157
|
+
|
|
158
|
+
```typescript
|
|
159
|
+
const pool = new ThreadPool(4);
|
|
160
|
+
|
|
161
|
+
const results = await pool.map([35, 36, 37, 38, 39, 40], n => {
|
|
162
|
+
function fibonacci(num: number): number {
|
|
163
|
+
if (num <= 1) return num;
|
|
164
|
+
return fibonacci(num - 1) + fibonacci(num - 2);
|
|
165
|
+
}
|
|
166
|
+
return fibonacci(n);
|
|
167
|
+
});
|
|
168
|
+
|
|
169
|
+
await pool.terminate();
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
## 📊 Бенчмарки
|
|
173
|
+
|
|
174
|
+
Запустите сами и убедитесь в производительности:
|
|
175
|
+
|
|
176
|
+
```bash
|
|
177
|
+
npm run build
|
|
178
|
+
npx tsx benchmarks/cpu-intensive.ts
|
|
179
|
+
npx tsx benchmarks/data-processing.ts
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
## 🎓 API Reference
|
|
96
183
|
|
|
97
184
|
### ThreadPool
|
|
98
185
|
|
|
@@ -147,92 +234,78 @@ const thread = new Thread((x: number) => x * x, [5]);
|
|
|
147
234
|
const result = await thread.join();
|
|
148
235
|
```
|
|
149
236
|
|
|
150
|
-
##
|
|
237
|
+
## ⚠️ Важные замечания
|
|
151
238
|
|
|
152
|
-
|
|
239
|
+
- 🔒 Функции выполняются в изолированном контексте (отдельный Worker Thread)
|
|
240
|
+
- 📦 Аргументы и результаты должны быть сериализуемыми
|
|
241
|
+
- 🚫 Замыкания не работают - функции не имеют доступа к внешним переменным
|
|
242
|
+
- ✅ Поддерживаются обычные и стрелочные функции
|
|
243
|
+
- ✅ `require()` доступен внутри функций для использования Node.js модулей
|
|
244
|
+
- ⚡ Лучше всего подходит для CPU-интенсивных задач (вычисления, обработка данных)
|
|
245
|
+
- 💡 Для I/O операций (чтение файлов, сеть) используйте async/await вместо потоков
|
|
153
246
|
|
|
154
|
-
|
|
155
|
-
import { ThreadPool } from 'parallel.js';
|
|
247
|
+
## 🎯 Когда использовать?
|
|
156
248
|
|
|
157
|
-
|
|
249
|
+
**✅ Используйте stardust-parallel-js когда:**
|
|
250
|
+
- Обрабатываете большие массивы данных
|
|
251
|
+
- Выполняете сложные вычисления
|
|
252
|
+
- Парсите или трансформируете данные
|
|
253
|
+
- Обрабатываете изображения/видео
|
|
254
|
+
- Нужно использовать все ядра CPU
|
|
158
255
|
|
|
159
|
-
|
|
256
|
+
**❌ Не используйте когда:**
|
|
257
|
+
- Простые операции (быстрее выполнить последовательно)
|
|
258
|
+
- I/O операции (файлы, сеть, БД) - они уже асинхронные
|
|
259
|
+
- Работаете с DOM (только в Node.js)
|
|
160
260
|
|
|
161
|
-
|
|
162
|
-
// Сложная обработка каждого элемента
|
|
163
|
-
return Math.sin(item) * Math.cos(item);
|
|
164
|
-
});
|
|
165
|
-
### Вычисление чисел Фибоначчи
|
|
261
|
+
## 📈 Как выбрать размер пула?
|
|
166
262
|
|
|
167
263
|
```typescript
|
|
168
|
-
import
|
|
264
|
+
import os from 'os';
|
|
169
265
|
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
const numbers = [35, 36, 37, 38, 39, 40];
|
|
173
|
-
|
|
174
|
-
const results = await pool.map(numbers, n => {
|
|
175
|
-
function fibonacci(num) {
|
|
176
|
-
if (num <= 1) return num;
|
|
177
|
-
return fibonacci(num - 1) + fibonacci(num - 2);
|
|
178
|
-
}
|
|
179
|
-
return fibonacci(n);
|
|
180
|
-
});
|
|
266
|
+
// Оптимально: количество CPU ядер
|
|
267
|
+
const pool = new ThreadPool(os.cpus().length);
|
|
181
268
|
|
|
182
|
-
|
|
269
|
+
// Для CPU-интенсивных задач
|
|
270
|
+
const pool = new ThreadPool(os.cpus().length - 1); // оставить 1 ядро для системы
|
|
183
271
|
|
|
184
|
-
|
|
272
|
+
// Для смешанной нагрузки
|
|
273
|
+
const pool = new ThreadPool(os.cpus().length * 2);
|
|
185
274
|
```
|
|
186
275
|
|
|
187
|
-
|
|
276
|
+
## 🤝 Сравнение с альтернативами
|
|
188
277
|
|
|
189
|
-
|
|
190
|
-
|
|
278
|
+
| Решение | Простота | Производительность | TypeScript | Размер |
|
|
279
|
+
|---------|----------|-------------------|------------|--------|
|
|
280
|
+
| **stardust-parallel-js** | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ✅ Полная | 9.3kB |
|
|
281
|
+
| worker_threads | ⭐⭐ | ⭐⭐⭐⭐⭐ | ⚠️ Частичная | Встроено |
|
|
282
|
+
| cluster | ⭐⭐ | ⭐⭐⭐ | ⚠️ Частичная | Встроено |
|
|
283
|
+
| child_process | ⭐ | ⭐⭐ | ❌ Нет | Встроено |
|
|
191
284
|
|
|
192
|
-
|
|
285
|
+
## 🚀 Roadmap
|
|
193
286
|
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
});
|
|
200
|
-
|
|
201
|
-
console.log(result); // 'folder/file.txt' или 'folder\\file.txt'
|
|
287
|
+
- [ ] Поддержка transferable objects для больших данных
|
|
288
|
+
- [ ] Автоматический выбор оптимального размера пула
|
|
289
|
+
- [ ] Приоритизация задач
|
|
290
|
+
- [ ] Мониторинг и статистика
|
|
291
|
+
- [ ] Поддержка async функций в потоках
|
|
202
292
|
|
|
203
|
-
|
|
204
|
-
```eturn response.json();
|
|
205
|
-
});
|
|
293
|
+
## 💬 Обратная связь
|
|
206
294
|
|
|
207
|
-
|
|
208
|
-
```
|
|
295
|
+
Нашли баг? Есть идея? [Создайте issue](https://github.com/b1411/stardust-parallel-js/issues)!
|
|
209
296
|
|
|
210
|
-
|
|
297
|
+
⭐ Если библиотека помогла вам - поставьте звезду на [GitHub](https://github.com/b1411/stardust-parallel-js)!
|
|
211
298
|
|
|
212
|
-
|
|
213
|
-
- 📦 Все аргументы и результаты должны быть сериализуемыми (передаются через структурированное клонирование)
|
|
214
|
-
- 🚫 Нельзя использовать замыкания - функции не имеют доступа к внешним переменным из основного потока
|
|
215
|
-
- ✅ Поддерживаются как обычные функции (`function`), так и стрелочные (`=>`)
|
|
216
|
-
- ✅ `require()` и встроенные модули Node.js доступны внутри функций
|
|
217
|
-
- ⚡ Worker Threads лучше всего подходят для CPU-интенсивных задач
|
|
218
|
-
|
|
219
|
-
## Требования
|
|
299
|
+
## 📦 Требования
|
|
220
300
|
|
|
221
301
|
- Node.js >= 14.0.0 (с поддержкой Worker Threads)
|
|
222
302
|
|
|
223
|
-
## Лицензия
|
|
224
|
-
|
|
225
|
-
MIT
|
|
303
|
+
## 📄 Лицензия
|
|
226
304
|
|
|
227
|
-
|
|
305
|
+
MIT © [b1411](https://github.com/b1411)
|
|
228
306
|
|
|
229
|
-
|
|
230
|
-
# Установка зависимостей
|
|
231
|
-
pnpm install
|
|
307
|
+
---
|
|
232
308
|
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
# Сборка
|
|
237
|
-
pnpm build
|
|
238
|
-
```
|
|
309
|
+
<p align="center">
|
|
310
|
+
Сделано с ❤️ для Node.js сообщества
|
|
311
|
+
</p>
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { ThreadPool } from "
|
|
2
|
-
export { Thread } from "
|
|
1
|
+
export { ThreadPool } from "./primitives/ThreadPool.js";
|
|
2
|
+
export { Thread } from "./primitives/Thread.js";
|
|
3
3
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { ThreadPool } from "
|
|
2
|
-
export { Thread } from "
|
|
1
|
+
export { ThreadPool } from "./primitives/ThreadPool.js";
|
|
2
|
+
export { Thread } from "./primitives/Thread.js";
|
|
3
3
|
//# sourceMappingURL=index.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "stardust-parallel-js",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.3",
|
|
4
4
|
"description": "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.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|