我目前正在开发一个后端,它使用 Nestjs 为我的前端提供休息端点。在某些端点中,我收到例如需要处理的元素数组。
具体示例:我收到一个包含 50 个元素的数组。对于每个元素,我需要发出一个 SQL 请求。因此我需要循环数组并在 SQL 中执行操作。
我总是问自己:我应该使用多少元素(例如工作线程)才能不阻塞事件循环?
也许我误解了事件循环的阻塞,有人可以启发我。
我认为在这种情况下您不需要工作线程。只要 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)
但是,如果您的代码在循环内执行计算量大的操作,那么您应该考虑工作线程,因为调用堆栈上的长时间运行操作将阻塞事件循环。
| 归档时间: |
|
| 查看次数: |
1632 次 |
| 最近记录: |