返回顶部
首页 > 资讯 > 精选 >如何使用p-limit限制并发数
  • 364
分享到

如何使用p-limit限制并发数

2023-07-04 20:07:10 364人浏览 泡泡鱼
摘要

这篇文章主要讲解了“如何使用p-limit限制并发数”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何使用p-limit限制并发数”吧!使用下面是官方提供的使用示例:import 

这篇文章主要讲解了“如何使用p-limit限制并发数”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何使用p-limit限制并发数”吧!

使用

下面是官方提供的使用示例:

import pLimit from 'p-limit';const limit = pLimit(1);const input = [limit(() => fetchSomething('foo')),limit(() => fetchSomething('bar')),limit(() => doSomething())];// Only one promise is run at onceconst result = await Promise.all(input);console.log(result);

在代码的第一行,使用了 pLimit(1) 来创建一个 p-limit 实例,并将并发限制设为 1。这意味着,在任意时刻,只能有一个 Promise 在运行。

在第四行,使用了 limit(() => fetchSomething('foo')) 来包装一个异步函数,并返回一个 Promise。同样的方式,在第五、六行也包装了其他两个异步函数。

最后,使用 Promise.all 方法来等待所有 Promise 的完成,并在完成后将结果输出到控制台。由于 p-limit 的限制,这些 Promise 只会按顺序一个一个地运行,保证了并发的数量不会超过 1。

源码分析

import Queue from 'yocto-queue';export default function pLimit(concurrency) {if (!((Number.isInteger(concurrency) || concurrency === Number.POSITIVE_INFINITY) && concurrency > 0)) {throw new TypeError('Expected `concurrency` to be a number from 1 and up');}const queue = new Queue();let activeCount = 0;}

yocto-queue 是一种允许高效存储和检索数据的数据结构。前边的章节分析过它的源码,详情参见: 源码共读|yocto-queue 队列 链表

pLimit 函数接受一个参数,并发数,首先函数判断参数是否是数组类型,或者是否能够转换成数字类型,如果不能,抛出一个错误。

之后定义了一个队列来存储待执行的函数,并使用一个计数器来记录当前正在运行的函数的数量。

const next = () => {activeCount--;if (queue.size > 0) {queue.dequeue()();}};const run = async (fn, resolve, args) => {activeCount++;const result = (async () => fn(...args))();resolve(result);try {await result;} catch {}next();};

在代码的 next 函数中,如果队列不为空,则从队列中取出一个函数并执行。这个函数的执行会导致计数器的值减 1。

在代码的 run 函数中,使用了 async/await 语法来执行传入的函数 fn。它还使用了 resolve 函数将函数的返回值包装成一个 Promise,并将这个 Promise 返回给调用者。在函数执行完成后,调用 next 函数来执行下一个函数。

const enqueue = (fn, resolve, args) => {queue.enqueue(run.bind(undefined, fn, resolve, args));(async () => {// This function needs to wait until the next microtask before comparing// `activeCount` to `concurrency`, because `activeCount` is updated asynchronously// when the run function is dequeued and called. The comparison in the if-statement// needs to happen asynchronously as well to get an up-to-date value for `activeCount`.await Promise.resolve();if (activeCount < concurrency && queue.size > 0) {queue.dequeue()();}})();};

在代码的 enqueue 函数中,使用了 queue.enqueue 方法将传入的函数 fn 加入队列。然后,它使用了 async/await 语法来在下一个微任务中检查当前的并发数量是否小于设定的并发限制。如果是,则从队列中取出一个函数并执行。

const generator = (fn, ...args) => new Promise(resolve => {enqueue(fn, resolve, args);});Object.defineProperties(generator, {activeCount: {get: () => activeCount,},pendinGCount: {get: () => queue.size,},clearQueue: {value: () => {queue.clear();},},});return generator;

在代码的 generator 函数中,使用了 new Promise 语法来生成一个新的 Promise,并在其中调用了 enqueue 函数。这样,每次调用生成的函数时,都会生成一个新的 Promise,并将函数加入队列。

最后,使用了 Object.defineProperties 方法来为生成的函数添加属性。这些属性可以用来查询当前的并发数量和等待队列的大小,以及清空等待队列。

感谢各位的阅读,以上就是“如何使用p-limit限制并发数”的内容了,经过本文的学习后,相信大家对如何使用p-limit限制并发数这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: 如何使用p-limit限制并发数

本文链接: https://lsjlt.com/news/347424.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何使用p-limit限制并发数
    这篇文章主要讲解了“如何使用p-limit限制并发数”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何使用p-limit限制并发数”吧!使用下面是官方提供的使用示例:import ...
    99+
    2023-07-04
  • 使用p-limit 限制并发数源码解析
    目录前言使用源码分析总结前言 并发是指在同一时间内处理的任务数量。例如,在一台服务器上同时运行多个 Web 服务器线程,可以同时处理多个客户端的请求。有时为了程序的稳定运行,我们需要...
    99+
    2022-12-25
    p-limit限制并发数 p limit并发限制
  • Nginx中如何使用limit模块限制并发数
    小编给大家分享一下Nginx中如何使用limit模块限制并发数,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧! nginx 限制ip并发数,nginx限制IP连接数的范例参考:如何Nginx限制同一个ip的连接数,限制并发数...
    99+
    2023-06-04
  • nginx如何限制php并发数
    要限制PHP并发数,可以使用Nginx的limit_conn_module模块。该模块可以限制对某个特定的location或serv...
    99+
    2023-08-24
    nginx php
  • JavaScript使用Promise实现并发请求数限制
    目录没有Promise的并发请求使用Promise限制并发请求使用Promise实现并发请求数限制总结没有Promise的并发请求 在Web开发中,我们经常需要发起多个异步请求来获取...
    99+
    2023-05-16
    JavaScript Promise并发请求限制 Promise限制并发请求 JS promise限制并发
  • JavaScript怎么使用Promise实现并发请求数限制
    本篇内容主要讲解“JavaScript怎么使用Promise实现并发请求数限制”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaScript怎么使用Promise实现并发请求数限制”吧!没有...
    99+
    2023-07-06
  • nginx怎么限制并发连接数
    要限制Nginx的并发连接数,可以使用Nginx的limit_conn模块。下面是一些常见的配置示例: 全局限制并发连接数: 在...
    99+
    2023-10-25
    nginx
  • 如何使用golang函数并发控制进行并行计算
    在 go 中可以使用 goroutine 和函数并发控制实现并行计算,具体步骤如下:创建 goroutine,使用 go 关键字创建轻量级并发执行单元。使用 sync.waitgroup...
    99+
    2024-04-24
    并发控制 并行计算 golang
  • nginx并发数限制limit_conn基本语法
    目录基本语法实验nginx配置使用jmeter测试安装Jmeter新建 Thread Group新建 HTTP Request添加 View Results in Table执行并发...
    99+
    2023-05-15
    nginx并发限制limit_conn nginx limit_conn
  • springboot接口并发数限制怎么配置
    要限制Spring Boot接口的并发数,可以使用线程池来控制并发访问。可以通过配置Spring Boot的线程池来限制并发数。1....
    99+
    2023-10-11
    springboot
  • MySQL 8.0限制用户并发连接数的两个参数
    MySQL 8.0限制用户并发连接数的两个参数 max_connectionsmax_user_connections max_connections 针对所有用户总体而言,MySQL Server允许的最大并发客户端连接数,默...
    99+
    2023-08-17
    mysql 数据库 java
  • MySQL中如何使用limit
    这篇文章将为大家详细讲解有关MySQL中如何使用limit,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。limit语法limit语法支持两个参数,offset和limit...
    99+
    2024-04-02
  • Mysql中limit如何使用
    本篇文章给大家分享的是有关Mysql中limit如何使用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。  LIMIT 子句可以被用于强制 SE...
    99+
    2024-04-02
  • 微信小程序如何解除请求并发限制
    这篇文章主要介绍了微信小程序如何解除请求并发限制,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。小程序并发限制由来已久,从刚发布时的 5 并发...
    99+
    2024-04-02
  • 如何限制Golang GRPC中客户端的并发连接
    php小编鱼仔将为大家介绍如何限制Golang GRPC中客户端的并发连接。在使用Golang进行开发时,我们常常会使用GRPC来进行服务间的通信。然而,如果不加以限制,客户端可能会因...
    99+
    2024-02-08
    并发请求
  • JavaScript如何利用Promise控制并发请求个数
    一、场景 假设现在有这么一种场景:现有 30 个异步请求需要发送,但由于某些原因,我们必须将同一时刻并发请求数量控制在 5 个以内,同时还要尽可能快速的拿到响应结果。 如图所示: ...
    99+
    2024-04-02
  • Go开发-使用Goroutine如何控制HTTP请求的并发量
    一、明确需求 我们使用 go 并发调用接口发起 HTTP 请求时,只需要在 func() 前面加上 go 关键字就很容易完成了,就是因为让并发变得如此简单,所以有的时候我们就需要控制一下并发请求的数量。 现在有个需求:本地有一千万条手机号,...
    99+
    2024-04-02
  • golang限制最大并发数的方法是什么
    在Go语言中,可以使用`sync.WaitGroup`和`chan`来限制最大并发数。 使用`sync.WaitGroup`:`s...
    99+
    2023-10-26
    golang
  • SQL中limit函数语法与用法(MYSQL获取限制某行数据)
    1.limit函数的语法和用法 (1)常用且简单的语法和用法 ①语法:limit n 即limit <参数> 具体语法:select <字段1>,...,<字段n> from...
    99+
    2024-04-02
  • golang并发锁如何使用
    这篇文章主要介绍了golang并发锁如何使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇golang并发锁如何使用文章都会有所收获,下面我们一起来看看吧。如果程序用到的数据是多个groutine之间的交互过程...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作