c55c4e96557dc8fcb400847745b0ac2c5ee014c7
[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 export const fixedPool = new FixedThreadPool<MyData, MyResponse>(
18 availableParallelism(),
19 workerFile,
20 {
21 errorHandler: (e: Error) => {
22 console.error(e)
23 },
24 onlineHandler: () => {
25 console.info('Worker is online')
26 }
27 }
28 )
29
30 export const dynamicPool = new DynamicThreadPool<MyData, MyResponse>(
31 Math.floor(availableParallelism() / 2),
32 availableParallelism(),
33 workerFile,
34 {
35 errorHandler: (e: Error) => {
36 console.error(e)
37 },
38 onlineHandler: () => {
39 console.info('Worker is online')
40 }
41 }
42 )
43
44 // eslint-disable-next-line @typescript-eslint/no-misused-promises
45 setTimeout(async () => {
46 await fixedPool.destroy()
47 await dynamicPool.destroy()
48 }, 3000)