repositories
/
poolifier.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Apply dependencies update
[poolifier.git]
/
src
/
pools
/
pool-internal.ts
diff --git
a/src/pools/pool-internal.ts
b/src/pools/pool-internal.ts
index ddee27eac0ed21bf43ca4f61b8378ee3a3146b6a..0c2454f83f9dbebbc48358ad3ab2e7c8c81fb77d 100644
(file)
--- a/
src/pools/pool-internal.ts
+++ b/
src/pools/pool-internal.ts
@@
-1,12
+1,23
@@
-import EventEmitter from 'events'
-import type { MessageValue } from '../utility-types'
-import type { IWorker } from './abstract-pool'
import type { IPool } from './pool'
import type { IPool } from './pool'
+import type { IPoolWorker } from './pool-worker'
/**
/**
- * Internal pool
ifier pool emitter
.
+ * Internal pool
types
.
*/
*/
-export class PoolEmitter extends EventEmitter {}
+export enum PoolType {
+ FIXED = 'fixed',
+ DYNAMIC = 'dynamic'
+}
+
+/**
+ * Internal tasks usage statistics.
+ */
+export interface TasksUsage {
+ run: number
+ running: number
+ runTime: number
+ avgRunTime: number
+}
/**
* Internal contract definition for a poolifier pool.
/**
* Internal contract definition for a poolifier pool.
@@
-16,7
+27,7
@@
export class PoolEmitter extends EventEmitter {}
* @template Response Type of response of execution.
*/
export interface IPoolInternal<
* @template Response Type of response of execution.
*/
export interface IPoolInternal<
- Worker extends IWorker,
+ Worker extends I
Pool
Worker,
Data = unknown,
Response = unknown
> extends IPool<Data, Response> {
Data = unknown,
Response = unknown
> extends IPool<Data, Response> {
@@
-26,56
+37,64
@@
export interface IPoolInternal<
readonly workers: Worker[]
/**
readonly workers: Worker[]
/**
- * The
tasks
map.
+ * The
workers tasks usage
map.
*
*
- *
-
`key`: The `Worker`
- *
- `value`: Number of tasks currently in progress on the worker
.
+ * `key`: The `Worker`
+ *
`value`: Worker tasks usage statistics
.
*/
*/
- readonly
tasks: Map<Worker, number
>
+ readonly
workersTasksUsage: Map<Worker, TasksUsage
>
/**
/**
- *
Emitter on which events can be listened to
.
+ *
Pool type
.
*
*
- * Events that can currently be listened to:
+ * If it is `'dynamic'`, it provides the `max` property.
+ */
+ readonly type: PoolType
+
+ /**
+ * Whether the pool is busy or not.
*
*
- *
- `'FullPool'`
+ *
The pool busyness boolean status.
*/
*/
- readonly
emitter: PoolEmitter
+ readonly
busy: boolean
/**
/**
- *
Maximum number of workers that can be created by this pool
.
+ *
Number of tasks currently concurrently running
.
*/
*/
- readonly
max?
: number
+ readonly
numberOfRunningTasks
: number
/**
/**
- * Whether the pool is dynamic or not.
+ * Finds a free worker based on the number of tasks the worker has applied.
+ *
+ * If a worker is found with `0` running tasks, it is detected as free and returned.
+ *
+ * If no free worker is found, `false` is returned.
*
*
- *
If it is dynamic, it provides the `max` property
.
+ *
@returns A free worker if there is one, otherwise `false`
.
*/
*/
- isDynamic(): boolean
+ findFreeWorker: () => Worker | false
/**
/**
- *
Creates a new worker for this pool and sets it up completely
.
+ *
Gets worker index
.
*
*
- * @returns New, completely set up worker.
+ * @param worker The worker.
+ * @returns The worker index.
*/
*/
-
createAndSetupWorker(): Work
er
+
getWorkerIndex: (worker: Worker) => numb
er
/**
/**
- *
Shut down given worker
.
+ *
Gets worker running tasks
.
*
*
- * @param worker A worker within `workers`.
+ * @param worker The worker.
+ * @returns The number of tasks currently running on the worker.
*/
*/
- destroyWorker(worker: Worker): void | Promise<void>
+ getWorkerRunningTasks: (worker: Worker) => number | undefined
/**
/**
- *
Register a listener callback on a given worker
.
+ *
Gets worker average tasks runtime
.
*
*
- * @param worker
A
worker.
- * @
param listener A message listener callback
.
+ * @param worker
The
worker.
+ * @
returns The average tasks runtime on the worker
.
*/
*/
- registerWorkerMessageListener<Message extends Data | Response>(
- worker: Worker,
- listener: (message: MessageValue<Message>) => void
- ): void
+ getWorkerAverageTasksRunTime: (worker: Worker) => number | undefined
}
}