CPU数量少于异步I/O操作数时的并行执行疑问
为什么异步I/O用Promise.all耗时远低于CPU核心数推算的时间?
你混淆了CPU密集型任务和异步I/O任务的处理逻辑:
- CPU密集型任务(比如复杂计算、大循环)需要CPU持续占用资源,此时2个CPU核心同一时间只能并行处理2个任务,10个任务确实要分5批,总耗时约5秒。
- 但HTTP请求这类异步I/O任务,核心耗时是等待外部服务器响应,发起请求后,CPU就会释放资源去处理其他请求,不需要一直盯着这个请求。操作系统的网络模块会在响应回来时通知CPU处理回调。
Promise.all在这里的作用是等待所有异步I/O操作完成,但这些操作是并行发起的:10个HTTP请求可以同时发送出去,各自等待1秒响应,所以所有结果会在1秒左右同时返回,总耗时自然就是1秒,和CPU核心数无关。
简单说:异步I/O的瓶颈不在CPU,而在外部资源(比如网络、远端服务器),CPU在等待时根本没闲着,能同时发起多个请求,所以不需要按CPU核心数分批处理。
内容的提问来源于stack exchange,提问作者Elmir Babakishiyev
相关产品推荐
相关产品推荐

