-
-
Notifications
You must be signed in to change notification settings - Fork 168
Open
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.
//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)));
});
//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.