andywer / andywer/threads.js

workers getting slow on every call

Open
#409 5 comments 0 reactions 0 assignees View on GitHub
bug question
Dominant language
TypeScript
Stars
3.5k
Forks
173
PR merge metrics
No merged PRs in 30d

Description

I use 3 workers to concurrently loop over a large array and return their levenshtein distance. They were fast at the beginning. But get slow on every function call.

```js
//index.js
...
const app = express();
const { spawn, Thread, Worker } = require('threads');
const workers = [await spawn(new Worker("./work.js")), await spawn(new Worker("./work.js")), await spawn(new Worker("./work.js"))];

for (var i = 0; i < 3; i++) {
const bigarray = [];
for (var j = 0; j < 135000; j++) {
bigarray.push(Math.random().toString());
}
workers[i].init(bigarray);
}

app.post('/', (req, res) => {
const query = req.body.query || Math.random().toString();
const promises = [];
for (const x of workers) {
promises.push(x.result(query));
}
Promise.all(promises).then(p => res.send(JSON.stringify(p)));
});

```

```js

//work.js

const { expose } = require("threads/worker");
const db = {};
const leven = require('leven');

expose({
init(array) {
db.data = array;
return;
},
result(query) {
const results = db.data.map(x => leven(x, query));
return { bestMatch: Math.min.apply(null, results) };
}
})
```

The above API gets 2 calls in 1000ms. The console also warns for reaching max event listeners.

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.