Skip to content

workers getting slow on every call #409

@TrashUwU

Description

@TrashUwU

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.

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions