Use @chainsafe/threads
This commit is contained in:
parent
0056e13ee5
commit
8881334330
|
@ -74,6 +74,7 @@
|
||||||
"@chainsafe/blst": "^0.2.0",
|
"@chainsafe/blst": "^0.2.0",
|
||||||
"@chainsafe/eslint-plugin-node": "^11.2.3",
|
"@chainsafe/eslint-plugin-node": "^11.2.3",
|
||||||
"@chainsafe/lodestar-spec-test-util": "^0.18.0",
|
"@chainsafe/lodestar-spec-test-util": "^0.18.0",
|
||||||
|
"@chainsafe/threads": "^1.9.0",
|
||||||
"@types/chai": "^4.2.9",
|
"@types/chai": "^4.2.9",
|
||||||
"@types/mocha": "^8.0.4",
|
"@types/mocha": "^8.0.4",
|
||||||
"@types/randombytes": "^2.0.0",
|
"@types/randombytes": "^2.0.0",
|
||||||
|
@ -94,7 +95,6 @@
|
||||||
"nyc": "^15.0.0",
|
"nyc": "^15.0.0",
|
||||||
"prettier": "^2.1.2",
|
"prettier": "^2.1.2",
|
||||||
"resolve-typescript-plugin": "^1.1.5",
|
"resolve-typescript-plugin": "^1.1.5",
|
||||||
"threads": "^1.7.0",
|
|
||||||
"ts-loader": "^8.3.0",
|
"ts-loader": "^8.3.0",
|
||||||
"ts-node": "^10.7.0",
|
"ts-node": "^10.7.0",
|
||||||
"typescript": "^4.6.3",
|
"typescript": "^4.6.3",
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import {spawn, Pool, Worker, Thread} from "threads";
|
import {spawn, Pool, Worker, Thread} from "@chainsafe/threads";
|
||||||
import {Implementation, PointFormat} from "../../../../src/index.js";
|
import {Implementation, PointFormat} from "../../../../src/index.js";
|
||||||
import {PublicKey, Signature} from "../../../../src/types.js";
|
import {PublicKey, Signature} from "../../../../src/types.js";
|
||||||
import {WorkerApi} from "./worker.js";
|
import {WorkerApi} from "./worker.js";
|
||||||
|
@ -7,6 +7,11 @@ type ThreadType = {
|
||||||
[K in keyof WorkerApi]: (...args: Parameters<WorkerApi[K]>) => Promise<ReturnType<WorkerApi[K]>>;
|
[K in keyof WorkerApi]: (...args: Parameters<WorkerApi[K]>) => Promise<ReturnType<WorkerApi[K]>>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
import path from "path";
|
||||||
|
import {fileURLToPath} from "url";
|
||||||
|
|
||||||
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
||||||
|
|
||||||
export class BlsMultiThreadNaive {
|
export class BlsMultiThreadNaive {
|
||||||
impl: Implementation;
|
impl: Implementation;
|
||||||
pool: Pool<Thread & ThreadType>;
|
pool: Pool<Thread & ThreadType>;
|
||||||
|
@ -18,7 +23,18 @@ export class BlsMultiThreadNaive {
|
||||||
// THe worker is not able to deserialize from uncompressed
|
// THe worker is not able to deserialize from uncompressed
|
||||||
// `Error: err _wrapDeserialize`
|
// `Error: err _wrapDeserialize`
|
||||||
this.format = impl === "blst-native" ? PointFormat.uncompressed : PointFormat.compressed;
|
this.format = impl === "blst-native" ? PointFormat.uncompressed : PointFormat.compressed;
|
||||||
this.pool = Pool(() => (spawn(new Worker("./worker")) as any) as Promise<Thread & ThreadType>, workerCount);
|
this.pool = Pool(
|
||||||
|
() =>
|
||||||
|
(spawn(
|
||||||
|
// There is still an annoyance dealing with ESM imports here:
|
||||||
|
// threads.js attempts to require.resolve any files passed to Worker, and
|
||||||
|
// the esm module resolver requires the .js extension, even though the .js file does not actually exist.
|
||||||
|
// The solution for now:
|
||||||
|
// Pass in the script path as an absolute path and suppress threads.js default behavior when importing
|
||||||
|
new Worker(path.join(__dirname, "./worker.js"), {suppressResolveScript: true, suppressTranspileTS: true})
|
||||||
|
) as any) as Promise<Thread & ThreadType>,
|
||||||
|
workerCount
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
async destroy(): Promise<void> {
|
async destroy(): Promise<void> {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import {expose} from "threads/worker";
|
import {expose} from "@chainsafe/threads/worker";
|
||||||
import {bls, init, CoordType, Implementation} from "../../../../src/index.js";
|
import {bls, init, CoordType, Implementation} from "../../../../src/index.js";
|
||||||
|
|
||||||
export type WorkerApi = typeof workerApi;
|
export type WorkerApi = typeof workerApi;
|
||||||
|
|
24
yarn.lock
24
yarn.lock
|
@ -266,6 +266,18 @@
|
||||||
"@chainsafe/persistent-merkle-tree" "^0.3.0"
|
"@chainsafe/persistent-merkle-tree" "^0.3.0"
|
||||||
case "^1.6.3"
|
case "^1.6.3"
|
||||||
|
|
||||||
|
"@chainsafe/threads@^1.9.0":
|
||||||
|
version "1.9.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@chainsafe/threads/-/threads-1.9.0.tgz#5ab07b1c150ad6ffc2325f344cde549a96b53802"
|
||||||
|
integrity sha512-TFSj5CWwi2o0Z3qBdrROdR+mJ23reBm+e0iPaifn657AxNtatdHNV9l6DiNwOKHTxTxKTm1daVuWW5TP0dJGDw==
|
||||||
|
dependencies:
|
||||||
|
callsites "^3.1.0"
|
||||||
|
debug "^4.2.0"
|
||||||
|
is-observable "^2.1.0"
|
||||||
|
observable-fns "^0.6.1"
|
||||||
|
optionalDependencies:
|
||||||
|
tiny-worker ">= 2"
|
||||||
|
|
||||||
"@cspotcode/source-map-consumer@0.8.0":
|
"@cspotcode/source-map-consumer@0.8.0":
|
||||||
version "0.8.0"
|
version "0.8.0"
|
||||||
resolved "https://registry.yarnpkg.com/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz#33bf4b7b39c178821606f669bbc447a6a629786b"
|
resolved "https://registry.yarnpkg.com/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz#33bf4b7b39c178821606f669bbc447a6a629786b"
|
||||||
|
@ -6100,18 +6112,6 @@ text-table@^0.2.0:
|
||||||
resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
|
resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
|
||||||
integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=
|
integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=
|
||||||
|
|
||||||
threads@^1.7.0:
|
|
||||||
version "1.7.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/threads/-/threads-1.7.0.tgz#d9e9627bfc1ef22ada3b733c2e7558bbe78e589c"
|
|
||||||
integrity sha512-Mx5NBSHX3sQYR6iI9VYbgHKBLisyB+xROCBGjjWm1O9wb9vfLxdaGtmT/KCjUqMsSNW6nERzCW3T6H43LqjDZQ==
|
|
||||||
dependencies:
|
|
||||||
callsites "^3.1.0"
|
|
||||||
debug "^4.2.0"
|
|
||||||
is-observable "^2.1.0"
|
|
||||||
observable-fns "^0.6.1"
|
|
||||||
optionalDependencies:
|
|
||||||
tiny-worker ">= 2"
|
|
||||||
|
|
||||||
through2@^2.0.0:
|
through2@^2.0.0:
|
||||||
version "2.0.5"
|
version "2.0.5"
|
||||||
resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd"
|
resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd"
|
||||||
|
|
Reference in New Issue