5d3d8e756833d84775d24bde59a975792da5b94b
[poolifier.git] / examples / typescript / pool.ts
1 import { dirname, extname, join } from 'node:path'
2 import { fileURLToPath } from 'node:url'
3
4 import {
5 availableParallelism,
6 DynamicThreadPool,
7 FixedThreadPool,
8 } from 'poolifier'
9
10 import type { MyData, MyResponse } from './worker.js'
11
12 const workerFile = join(
13 dirname(fileURLToPath(import.meta.url)),
14 `worker${extname(fileURLToPath(import.meta.url))}`
15 )
16
17 const fixedPool = new FixedThreadPool<MyData, MyResponse>(
18 availableParallelism(),
19 workerFile,
20 {
21 onlineHandler: () => {
22 console.info('Worker is online')
23 },
24 errorHandler: (e: Error) => {
25 console.error(e)
26 },
27 }
28 )
29
30 await fixedPool.execute()
31
32 const dynamicPool = new DynamicThreadPool<MyData, MyResponse>(
33 Math.floor(availableParallelism() / 2),
34 availableParallelism(),
35 workerFile,
36 {
37 onlineHandler: () => {
38 console.info('Worker is online')
39 },
40 errorHandler: (e: Error) => {
41 console.error(e)
42 },
43 }
44 )
45
46 await dynamicPool.execute()
47
48 setTimeout(async () => {
49 await fixedPool.destroy()
50 await dynamicPool.destroy()
51 }, 3000)