p-limit 源代码分析
本文最后更新于:2025年3月4日 晚上
之前在狼叔的了不起的Nodejs 书中接触到这个库,了解了一下,觉得很有意思。虽然实际工作中没有接触过大量并发的业务,但是了解一下极端情况下JS异步任务的调度也是挺不错的。
下面是智普清言的介绍:
p-limit
是一个 Node.js 和浏览器都支持的库,用于限制并发执行的数量。它基于p-queue
,是一个用于控制异步任务队列的库,可以确保同时只有指定数量的异步操作在进行。
以下是一些可能使用p-limit
的情况:
- 限制并发请求数量:在进行大量异步网络请求(例如使用
fetch
或axios
)时,为了避免服务器过载或达到API限制,可以使用p-limit
来限制同时发出的请求数量。- 资源密集型任务:当执行一些CPU或内存密集型的任务时,如果同时运行太多的任务可能会影响系统性能,使用
p-limit
可以确保系统资源得到合理分配。- 文件处理:在处理大量文件读写操作时,为了防止磁盘I/O成为瓶颈,可以使用
p-limit
来限制并发文件操作的数量。- 数据库操作:在进行数据库批量操作时,为了避免过多的并发连接导致数据库响应缓慢或超时,可以使用
p-limit
来限制并发数据库操作的数量。- API节流:如果你正在开发一个需要调用第三方服务API的应用,并且该API对请求频率有限制,使用
p-limit
可以帮助你控制请求的速率,避免触发API的限制。- 提高成功率:在某些情况下,限制并发数可以提高任务的成功率,因为减少了同时操作可能导致的冲突或错误。
使用p-limit
可以帮助你更好地控制异步流程,确保系统的稳定性和性能。它通过创建一个限制器实例,并指定最大并发数,然后使用这个限制器来包装异步任务,从而实现并发控制。
下面是核心代码:
1 |
|
日志打印结果:
1 |
|
总结就是对嵌套调用的 async await ,await 调用的表达式,必须执行完整,才会往下执行。对于内部 await 阻塞的语句,会先执行可以执行的。被称为主线程代码(相对来说)。
1 |
|
打印结果:
1 |
|
疑问: async3 为什么在 async1之前?
p-limit 源代码分析
https://hercules11.github.io/blog/2024/05/09/p-limit 源代码分析/