diff options
| author | dakkar <dakkar@thenautilus.net> | 2024-10-09 15:17:22 +0100 |
|---|---|---|
| committer | dakkar <dakkar@thenautilus.net> | 2024-10-09 15:17:22 +0100 |
| commit | f00576bce6b5f4086112f48046316bfe49559759 (patch) | |
| tree | 9268031a42551f3bfafbb33091f925e0cb5af3aa /packages/frontend/src/scripts/worker-multi-dispatch.ts | |
| parent | Merge branch 'merge-requests/668' into feature/2024.9.0 (diff) | |
| parent | Merge pull request #14580 from misskey-dev/develop (diff) | |
| download | sharkey-f00576bce6b5f4086112f48046316bfe49559759.tar.gz sharkey-f00576bce6b5f4086112f48046316bfe49559759.tar.bz2 sharkey-f00576bce6b5f4086112f48046316bfe49559759.zip | |
Merge remote-tracking branch 'misskey/master' into feature/2024.9.0
Diffstat (limited to 'packages/frontend/src/scripts/worker-multi-dispatch.ts')
| -rw-r--r-- | packages/frontend/src/scripts/worker-multi-dispatch.ts | 82 |
1 files changed, 0 insertions, 82 deletions
diff --git a/packages/frontend/src/scripts/worker-multi-dispatch.ts b/packages/frontend/src/scripts/worker-multi-dispatch.ts deleted file mode 100644 index 6b3fcd9383..0000000000 --- a/packages/frontend/src/scripts/worker-multi-dispatch.ts +++ /dev/null @@ -1,82 +0,0 @@ -/* - * SPDX-FileCopyrightText: syuilo and misskey-project - * SPDX-License-Identifier: AGPL-3.0-only - */ - -function defaultUseWorkerNumber(prev: number, totalWorkers: number) { - return prev + 1; -} - -export class WorkerMultiDispatch<POST = any, RETURN = any> { - private symbol = Symbol('WorkerMultiDispatch'); - private workers: Worker[] = []; - private terminated = false; - private prevWorkerNumber = 0; - private getUseWorkerNumber = defaultUseWorkerNumber; - private finalizationRegistry: FinalizationRegistry<symbol>; - - constructor(workerConstructor: () => Worker, concurrency: number, getUseWorkerNumber = defaultUseWorkerNumber) { - this.getUseWorkerNumber = getUseWorkerNumber; - for (let i = 0; i < concurrency; i++) { - this.workers.push(workerConstructor()); - } - - this.finalizationRegistry = new FinalizationRegistry(() => { - this.terminate(); - }); - this.finalizationRegistry.register(this, this.symbol); - - if (_DEV_) console.log('WorkerMultiDispatch: Created', this); - } - - public postMessage(message: POST, options?: Transferable[] | StructuredSerializeOptions, useWorkerNumber: typeof defaultUseWorkerNumber = this.getUseWorkerNumber) { - let workerNumber = useWorkerNumber(this.prevWorkerNumber, this.workers.length); - workerNumber = Math.abs(Math.round(workerNumber)) % this.workers.length; - if (_DEV_) console.log('WorkerMultiDispatch: Posting message to worker', workerNumber, useWorkerNumber); - this.prevWorkerNumber = workerNumber; - - // 不毛だがunionをoverloadに突っ込めない - // https://stackoverflow.com/questions/66507585/overload-signatures-union-types-and-no-overload-matches-this-call-error - // https://github.com/microsoft/TypeScript/issues/14107 - if (Array.isArray(options)) { - this.workers[workerNumber].postMessage(message, options); - } else { - this.workers[workerNumber].postMessage(message, options); - } - return workerNumber; - } - - public addListener(callback: (this: Worker, ev: MessageEvent<RETURN>) => any, options?: boolean | AddEventListenerOptions) { - this.workers.forEach(worker => { - worker.addEventListener('message', callback, options); - }); - } - - public removeListener(callback: (this: Worker, ev: MessageEvent<RETURN>) => any, options?: boolean | AddEventListenerOptions) { - this.workers.forEach(worker => { - worker.removeEventListener('message', callback, options); - }); - } - - public terminate() { - this.terminated = true; - if (_DEV_) console.log('WorkerMultiDispatch: Terminating', this); - this.workers.forEach(worker => { - worker.terminate(); - }); - this.workers = []; - this.finalizationRegistry.unregister(this); - } - - public isTerminated() { - return this.terminated; - } - - public getWorkers() { - return this.workers; - } - - public getSymbol() { - return this.symbol; - } -} |