*/
ROUND_ROBIN: 'ROUND_ROBIN',
/**
- * Less used worker selection strategy.
+ * Least used worker selection strategy.
*/
- LESS_USED: 'LESS_USED',
+ LEAST_USED: 'LEAST_USED',
/**
- * Less busy worker selection strategy.
+ * Least busy worker selection strategy.
*/
- LESS_BUSY: 'LESS_BUSY',
+ LEAST_BUSY: 'LEAST_BUSY',
/**
* Fair share worker selection strategy.
*/
/**
* Weighted round robin worker selection strategy.
*/
- WEIGHTED_ROUND_ROBIN: 'WEIGHTED_ROUND_ROBIN'
+ WEIGHTED_ROUND_ROBIN: 'WEIGHTED_ROUND_ROBIN',
+ /**
+ * Interleaved weighted round robin worker selection strategy.
+ *
+ * @experimental
+ */
+ INTERLEAVED_WEIGHTED_ROUND_ROBIN: 'INTERLEAVED_WEIGHTED_ROUND_ROBIN'
} as const)
/**
import type { IPool } from '../pool'
import type { IWorker } from '../worker'
import { FairShareWorkerChoiceStrategy } from './fair-share-worker-choice-strategy'
- import { LessBusyWorkerChoiceStrategy } from './less-busy-worker-choice-strategy'
- import { LessUsedWorkerChoiceStrategy } from './less-used-worker-choice-strategy'
+import { InterleavedWeightedRoundRobinWorkerChoiceStrategy } from './interleaved-weighted-round-robin-worker-choice-strategy'
+ import { LeastBusyWorkerChoiceStrategy } from './least-busy-worker-choice-strategy'
+ import { LeastUsedWorkerChoiceStrategy } from './least-used-worker-choice-strategy'
import { RoundRobinWorkerChoiceStrategy } from './round-robin-worker-choice-strategy'
import type {
IWorkerChoiceStrategy,
)
],
[
- WorkerChoiceStrategies.LESS_USED,
- new (LessUsedWorkerChoiceStrategy.bind(this))<Worker, Data, Response>(
+ WorkerChoiceStrategies.LEAST_USED,
+ new (LeastUsedWorkerChoiceStrategy.bind(this))<Worker, Data, Response>(
pool,
opts
)
],
[
- WorkerChoiceStrategies.LESS_BUSY,
- new (LessBusyWorkerChoiceStrategy.bind(this))<Worker, Data, Response>(
+ WorkerChoiceStrategies.LEAST_BUSY,
+ new (LeastBusyWorkerChoiceStrategy.bind(this))<Worker, Data, Response>(
pool,
opts
)
Data,
Response
>(pool, opts)
+ ],
+ [
+ WorkerChoiceStrategies.INTERLEAVED_WEIGHTED_ROUND_ROBIN,
+ new (InterleavedWeightedRoundRobinWorkerChoiceStrategy.bind(this))<
+ Worker,
+ Data,
+ Response
+ >(pool, opts)
]
])
}
it('Verify that WorkerChoiceStrategies enumeration provides string values', () => {
expect(WorkerChoiceStrategies.ROUND_ROBIN).toBe('ROUND_ROBIN')
- expect(WorkerChoiceStrategies.LESS_USED).toBe('LESS_USED')
- expect(WorkerChoiceStrategies.LESS_BUSY).toBe('LESS_BUSY')
+ expect(WorkerChoiceStrategies.LEAST_USED).toBe('LEAST_USED')
+ expect(WorkerChoiceStrategies.LEAST_BUSY).toBe('LEAST_BUSY')
expect(WorkerChoiceStrategies.FAIR_SHARE).toBe('FAIR_SHARE')
expect(WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN).toBe(
'WEIGHTED_ROUND_ROBIN'
)
+ expect(WorkerChoiceStrategies.INTERLEAVED_WEIGHTED_ROUND_ROBIN).toBe(
+ 'INTERLEAVED_WEIGHTED_ROUND_ROBIN'
+ )
})
it('Verify ROUND_ROBIN strategy is the default at pool creation', async () => {
await pool.destroy()
})
- it('Verify LESS_USED strategy default tasks usage statistics requirements', async () => {
- const workerChoiceStrategy = WorkerChoiceStrategies.LESS_USED
+ it('Verify LEAST_USED strategy default tasks usage statistics requirements', async () => {
+ const workerChoiceStrategy = WorkerChoiceStrategies.LEAST_USED
let pool = new FixedThreadPool(
max,
'./tests/worker-files/thread/testWorker.js',
await pool.destroy()
})
- it('Verify LESS_USED strategy can be run in a fixed pool', async () => {
+ it('Verify LEAST_USED strategy can be run in a fixed pool', async () => {
const pool = new FixedThreadPool(
max,
'./tests/worker-files/thread/testWorker.js',
- { workerChoiceStrategy: WorkerChoiceStrategies.LESS_USED }
+ { workerChoiceStrategy: WorkerChoiceStrategies.LEAST_USED }
)
- // TODO: Create a better test to cover `LessUsedWorkerChoiceStrategy#choose`
+ // TODO: Create a better test to cover `LeastUsedWorkerChoiceStrategy#choose`
const maxMultiplier = 2
for (let i = 0; i < max * maxMultiplier; i++) {
await pool.execute()
await pool.destroy()
})
- it('Verify LESS_USED strategy can be run in a dynamic pool', async () => {
+ it('Verify LEAST_USED strategy can be run in a dynamic pool', async () => {
const pool = new DynamicThreadPool(
min,
max,
'./tests/worker-files/thread/testWorker.js',
- { workerChoiceStrategy: WorkerChoiceStrategies.LESS_USED }
+ { workerChoiceStrategy: WorkerChoiceStrategies.LEAST_USED }
)
- // TODO: Create a better test to cover `LessUsedWorkerChoiceStrategy#choose`
+ // TODO: Create a better test to cover `LeastUsedWorkerChoiceStrategy#choose`
const maxMultiplier = 2
for (let i = 0; i < max * maxMultiplier; i++) {
await pool.execute()
await pool.destroy()
})
- it('Verify LESS_BUSY strategy default tasks usage statistics requirements', async () => {
- const workerChoiceStrategy = WorkerChoiceStrategies.LESS_BUSY
+ it('Verify LEAST_BUSY strategy default tasks usage statistics requirements', async () => {
+ const workerChoiceStrategy = WorkerChoiceStrategies.LEAST_BUSY
let pool = new FixedThreadPool(
max,
'./tests/worker-files/thread/testWorker.js',
await pool.destroy()
})
- it('Verify LESS_BUSY strategy can be run in a fixed pool', async () => {
+ it('Verify LEAST_BUSY strategy can be run in a fixed pool', async () => {
const pool = new FixedThreadPool(
max,
'./tests/worker-files/thread/testWorker.js',
- { workerChoiceStrategy: WorkerChoiceStrategies.LESS_BUSY }
+ { workerChoiceStrategy: WorkerChoiceStrategies.LEAST_BUSY }
)
- // TODO: Create a better test to cover `LessBusyWorkerChoiceStrategy#choose`
+ // TODO: Create a better test to cover `LeastBusyWorkerChoiceStrategy#choose`
const maxMultiplier = 2
for (let i = 0; i < max * maxMultiplier; i++) {
await pool.execute()
await pool.destroy()
})
- it('Verify LESS_BUSY strategy can be run in a dynamic pool', async () => {
+ it('Verify LEAST_BUSY strategy can be run in a dynamic pool', async () => {
const pool = new DynamicThreadPool(
min,
max,
'./tests/worker-files/thread/testWorker.js',
- { workerChoiceStrategy: WorkerChoiceStrategies.LESS_BUSY }
+ { workerChoiceStrategy: WorkerChoiceStrategies.LEAST_BUSY }
)
- // TODO: Create a better test to cover `LessBusyWorkerChoiceStrategy#choose`
+ // TODO: Create a better test to cover `LeastBusyWorkerChoiceStrategy#choose`
const maxMultiplier = 2
for (let i = 0; i < max * maxMultiplier; i++) {
await pool.execute()