-const FixedThreadPool = require('../lib/fixed')
-const DynamicThreadPool = require('../lib/dynamic')
-const Pool = require('worker-threads-pool')
+const { FixedThreadPool } = require('../lib/index')
+const { DynamicThreadPool } = require('../lib/index')
+const WorkerThreadsPool = require('worker-threads-pool')
+const workerpool = require('workerpool')
const tasks = 1000
const size = 16
// pools
-const externalPool = new Pool({ max: size })
-const fixedPool = new FixedThreadPool(size, './yourWorker.js', {
+const workerThreadsPool = new WorkerThreadsPool({ max: size })
+const workerPool = workerpool.pool('./external/workerpoolWorker.js', {
+ minWorkers: size / 2,
+ maxWorkers: size * 3,
+ workerType: 'thread'
+})
+const fixedPool = new FixedThreadPool(size, './thread/worker.js', {
maxTasks: 10000
})
const dynamicPool = new DynamicThreadPool(
size / 2,
size * 3,
- './yourWorker.js',
+ './thread/worker.js',
{ maxTasks: 10000 }
)
let executions = 0
const time = Date.now()
for (let i = 0; i <= tasks; i++) {
- fixedPool.execute(workerData).then(res => {
- executions++
- if (executions === tasks) {
- console.log(
- `Fixed pool take ${Date.now() - time} to work on ${executions} tasks`
- )
- }
- })
+ fixedPool
+ .execute(workerData)
+ .then(res => {
+ executions++
+ if (executions === tasks) {
+ return console.log(
+ `Fixed pool take ${
+ Date.now() - time
+ }ms to work on ${executions} tasks`
+ )
+ }
+ return null
+ })
+ .catch(err => console.error(err))
}
}
let executions = 0
const time = Date.now()
for (let i = 0; i <= tasks; i++) {
- dynamicPool.execute(workerData).then(res => {
- executions++
- if (executions === tasks) {
- console.log(
- `Dynamic pool take ${Date.now() -
- time} to work on ${executions} tasks`
- )
- }
- })
+ dynamicPool
+ .execute(workerData)
+ .then(res => {
+ executions++
+ if (executions === tasks) {
+ return console.log(
+ `Dynamic pool take ${
+ Date.now() - time
+ }ms to work on ${executions} tasks`
+ )
+ }
+ return null
+ })
+ .catch(err => console.error(err))
}
}
-async function externalPoolTest () {
+async function workerThreadsPoolTest () {
let executions = 0
const time = Date.now()
for (let i = 0; i <= tasks; i++) {
new Promise((resolve, reject) => {
- externalPool.acquire(
- './externalWorker.js',
+ workerThreadsPool.acquire(
+ './external/workerThreadsWorker.js',
{ workerData: workerData },
(err, worker) => {
if (err) {
})
}
)
- }).then(res => {
- if (tasks === executions) {
- console.log(
- `External pool take ${Date.now() -
- time} to work on ${executions} tasks`
- )
- }
})
+ .then(res => {
+ if (tasks === executions) {
+ return console.log(
+ `worker threads pool take ${
+ Date.now() - time
+ }ms to work on ${executions} tasks`
+ )
+ }
+ return null
+ })
+ .catch(err => console.error(err))
+ }
+}
+
+async function workerpoolTest () {
+ let executions = 0
+ const time = Date.now()
+ for (let i = 0; i <= tasks; i++) {
+ workerPool
+ .exec('yourFunction', [workerData])
+ .then(res => {
+ executions++
+ if (tasks === executions) {
+ return console.log(
+ `workerpool take ${
+ Date.now() - time
+ }ms to work on ${executions} tasks`
+ )
+ }
+ return null
+ })
+ .catch(err => console.error(err))
}
}
async function test () {
- fixedTest()
- dynamicTest()
- externalPoolTest()
+ await fixedTest()
+ await dynamicTest()
+ await workerThreadsPoolTest()
+ await workerpoolTest()
}
test()