type IWorker,
type IWorkerNode,
type MeasurementStatistics,
+ type WorkerInfo,
type WorkerNodeOptions,
type WorkerType,
WorkerTypes,
* @returns The worker type of the given worker.
* @internal
*/
-export const getWorkerType = (worker: IWorker): undefined | WorkerType => {
+const getWorkerType = (worker: IWorker): undefined | WorkerType => {
if (worker instanceof ThreadWorker) {
return WorkerTypes.thread
} else if (worker instanceof ClusterWorker) {
* @returns The worker id of the given worker.
* @internal
*/
-export const getWorkerId = (worker: IWorker): number | undefined => {
+const getWorkerId = (worker: IWorker): number | undefined => {
if (worker instanceof ThreadWorker) {
return worker.threadId
} else if (worker instanceof ClusterWorker) {
}
}
+export const initWorkerInfo = (worker: IWorker): WorkerInfo => {
+ return {
+ backPressure: false,
+ backPressureStealing: false,
+ continuousStealing: false,
+ dynamic: false,
+ id: getWorkerId(worker),
+ ready: false,
+ stealing: false,
+ stolen: false,
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
+ type: getWorkerType(worker)!,
+ }
+}
+
export const waitWorkerNodeEvents = async <
Worker extends IWorker,
Data = unknown
import {
checkWorkerNodeArguments,
createWorker,
- getWorkerId,
- getWorkerType,
+ initWorkerInfo,
} from './utils.js'
import {
type EventHandler,
env: opts.env,
workerOptions: opts.workerOptions,
})
- this.info = this.initWorkerInfo(this.worker)
+ this.info = initWorkerInfo(this.worker)
this.usage = this.initWorkerUsage()
if (this.info.type === WorkerTypes.thread) {
this.messageChannel = new MessageChannel()
}
}
- private initWorkerInfo (worker: Worker): WorkerInfo {
- return {
- backPressure: false,
- backPressureStealing: false,
- continuousStealing: false,
- dynamic: false,
- id: getWorkerId(worker),
- ready: false,
- stealing: false,
- stolen: false,
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- type: getWorkerType(worker)!,
- }
- }
-
private initWorkerUsage (): WorkerUsage {
const getTasksQueueSize = (): number => {
return this.tasksQueue.size
import { expect } from '@std/expect'
-import cluster, { Worker as ClusterWorker } from 'node:cluster'
+import { Worker as ClusterWorker } from 'node:cluster'
import { Worker as ThreadWorker } from 'node:worker_threads'
import { CircularBuffer } from '../../lib/circular-buffer.cjs'
createWorker,
DEFAULT_MEASUREMENT_STATISTICS_REQUIREMENTS,
getDefaultTasksQueueOptions,
- getWorkerId,
- getWorkerType,
+ initWorkerInfo,
updateMeasurementStatistics,
} from '../../lib/pools/utils.cjs'
import { MeasurementHistorySize } from '../../lib/pools/worker.cjs'
).toBeInstanceOf(ClusterWorker)
})
- it('Verify getWorkerType() behavior', () => {
- expect(
- getWorkerType(
- new ThreadWorker('./tests/worker-files/thread/testWorker.mjs')
- )
- ).toBe(WorkerTypes.thread)
- expect(getWorkerType(cluster.fork())).toBe(WorkerTypes.cluster)
- })
-
- it('Verify getWorkerId() behavior', () => {
- const threadWorker = new ThreadWorker(
- './tests/worker-files/thread/testWorker.mjs'
+ it('Verify initWorkerInfo() behavior', () => {
+ const threadWorker = createWorker(
+ WorkerTypes.thread,
+ './tests/worker-files/thread/testWorker.mjs',
+ {}
)
- const clusterWorker = cluster.fork()
- expect(getWorkerId(threadWorker)).toBe(threadWorker.threadId)
- expect(getWorkerId(clusterWorker)).toBe(clusterWorker.id)
+ const threadWorkerInfo = initWorkerInfo(threadWorker)
+ expect(threadWorkerInfo).toStrictEqual({
+ backPressure: false,
+ backPressureStealing: false,
+ continuousStealing: false,
+ dynamic: false,
+ id: threadWorker.threadId,
+ ready: false,
+ stealing: false,
+ stolen: false,
+ type: WorkerTypes.thread,
+ })
+ const clusterWorker = createWorker(
+ WorkerTypes.cluster,
+ './tests/worker-files/cluster/testWorker.mjs',
+ {}
+ )
+ const clusterWorkerInfo = initWorkerInfo(clusterWorker)
+ expect(clusterWorkerInfo).toMatchObject({
+ backPressure: false,
+ backPressureStealing: false,
+ continuousStealing: false,
+ dynamic: false,
+ id: clusterWorker.id,
+ ready: false,
+ stealing: false,
+ stolen: false,
+ type: WorkerTypes.cluster,
+ })
})
})