nodejs Worker_thread 与 Promise.all 或 allSettled()
nodejs Worker_thread vs Promise.all or allSettled()
我正在用 Express 开发 nodeJS 服务器。
众所周知,网络进程应该是异步处理的。
人们通常使用回调函数或 Promise(async/await).
来处理结果
在我的例子中,我需要向另一台服务器发送几十个请求来获取数据。
但我认为一个一个地请求这些是低效的。所以我发现 Promise.all() and Promise.allSettled() 异步处理多个工作并一次获得所有工作结果。
我还在nodeJS中找到了worker_thread,结果类似。
我不知道哪个是正确的,它们之间有什么区别。
有人帮我吗?
工作线程用于多线程cpu 密集型任务。 Promise.all 或 Promise.all 结算可能是您最好的选择。你选择哪一个取决于你想如何处理rejects/resolves。
这个人的回答可能会为您消除分歧:
由于节点是单线程的,因此工作线程旨在用于防止事件循环阻塞,这是一项耗时的长而复杂的计算任务。但是,他们不适合 I/O 密集型工作。
来自节点documentation
Workers (threads) are useful for performing CPU-intensive JavaScript
operations. They will not help much with I/O-intensive work. Node.js’s
built-in asynchronous I/O operations are more efficient than Workers
can be.
所以我认为在这种情况下你应该使用 Promise.all/allSettled
我正在用 Express 开发 nodeJS 服务器。 众所周知,网络进程应该是异步处理的。 人们通常使用回调函数或 Promise(async/await).
来处理结果在我的例子中,我需要向另一台服务器发送几十个请求来获取数据。 但我认为一个一个地请求这些是低效的。所以我发现 Promise.all() and Promise.allSettled() 异步处理多个工作并一次获得所有工作结果。 我还在nodeJS中找到了worker_thread,结果类似。
我不知道哪个是正确的,它们之间有什么区别。 有人帮我吗?
工作线程用于多线程cpu 密集型任务。 Promise.all 或 Promise.all 结算可能是您最好的选择。你选择哪一个取决于你想如何处理rejects/resolves。
这个人的回答可能会为您消除分歧:
由于节点是单线程的,因此工作线程旨在用于防止事件循环阻塞,这是一项耗时的长而复杂的计算任务。但是,他们不适合 I/O 密集型工作。
来自节点documentation
Workers (threads) are useful for performing CPU-intensive JavaScript operations. They will not help much with I/O-intensive work. Node.js’s built-in asynchronous I/O operations are more efficient than Workers can be.
所以我认为在这种情况下你应该使用 Promise.all/allSettled