我什么时候应该使用工作线程?

MeM*_*Max 3 node.js nestjs

我目前正在开发一个后端,它使用 Nestjs 为我的前端提供休息端点。在某些端点中,我收到例如需要处理的元素数组。

具体示例:我收到一个包含 50 个元素的数组。对于每个元素,我需要发出一个 SQL 请求。因此我需要循环数组并在 SQL 中执行操作。

我总是问自己:我应该使用多少元素(例如工作线程)才能不阻塞事件循环?

也许我误解了事件循环的阻塞,有人可以启发我。

eol*_*eol 6

我认为在这种情况下您不需要工作线程。只要 sql 查询异步执行,即 sql 查询调用不会阻塞,就可以了。您可以使用它Promise.all来加速循环的处理,因为查询将并行执行,例如

const dbQueryPromises = [];

for(const entry of data) {
   dbQueryPromises.push(dbConnection.query(buildQuery(entry)));
}

await Promise.all(dbQueryPromises);
Run Code Online (Sandbox Code Playgroud)

但是,如果您的代码在循环内执行计算量大的操作,那么您应该考虑工作线程,因为调用堆栈上的长时间运行操作将阻塞事件循环。