Golang —协程池(panjf2000/ants/v2)

embedded/2025/2/5 3:39:28/

Golang —协程池(panjf2000/ants/v2)

  • 1 ants
    • 1.1 基本信息
    • 1.2 ants 是如何运行的(流程图)

1 ants

1.1 基本信息

代码地址:github.com/panjf2000/ants/v2
介绍:ants是一个高性能的 goroutine 池,实现了对大规模 goroutine 的调度管理、goroutine 复用,允许使用者在开发并发程序的时候限制 goroutine 数量,复用资源,达到更高效执行任务的效果。

功能

  • 自动调度海量的 goroutines,复用 goroutines。
  • 定期清理过期的 goroutines,进一步节省资源。
  • 提供了大量有用的接口:任务提交、获取运行中的 goroutine 数量、动态调整 Pool 大小、释放 Pool、重启 Pool。
  • 优雅处理 panic,防止程序崩溃。
  • 资源复用,极大节省内存使用量;在大规模批量并发任务场景下比原生 goroutine 并发具有更高的性能。
  • 非阻塞机制。

1.2 ants 是如何运行的(流程图)

在这里插入图片描述

  1. 这里每一个worker其实就是一个单独的协程。Submit()就是将一个任务交给worker(协程)来异步处理,等任务执行完后,worker会将自己交还给协程池。
  2. 倘若回归协程池失败,或者用户提交了一个空的任务包,则该 goWorker 会被销毁,销毁方式是将自身放回协程池的对象池 workerCache. 并且会调用协调器 cond 唤醒一个阻塞等待的协程。
  3. 通过使用 ants,可以实例化一个 goroutine 池,复用 goroutine ,节省资源,提升性能,它会自动管理worker(协程)的创建、回收、释放等工作。

http://www.ppmy.cn/embedded/159644.html

相关文章

YOLOV11-1:YoloV11-安装和CLI方式训练模型

YoloV11-安装和CLI方式训练模型 1.安装和运行1.1安装的基础环境1.2安装yolo相关组件1.3命令行方式使用1.3.1 训练1.3.2 预测 本文介绍yoloV11的安装和命令行接口 1.安装和运行 1.1安装的基础环境 GPU环境,其中CUDA是12.4版本 1.2安装yolo相关组件 # 克隆github…

深度解析近期爆火的 DeepSeek

最近,AI 领域有个名字频繁出现在大众视野 ——DeepSeek,它的火爆程度就像一颗投入平静湖面的巨石,激起千层浪。今天,咱们就来深入了解一下这个 “AI 新星”。 官网:DeepSeek - 探索未至之境 DeepSeek 是什么 DeepSeek…

C++并发编程指南04

文章目录 共享数据的问题3.1.1 条件竞争双链表的例子条件竞争示例恶性条件竞争的特点 3.1.2 避免恶性条件竞争1. 使用互斥量保护共享数据结构2. 无锁编程3. 软件事务内存(STM) 总结互斥量与共享数据保护3.2.1 互斥量使用互斥量保护共享数据示例代码&…

JavaScript语言的面向对象编程

JavaScript语言的面向对象编程 引言 面向对象编程(OOP)是一种以对象为中心的程序设计思想,旨在通过将数据和操作数据的行为组合在一起,提高代码的可重用性、可维护性和可扩展性。而JavaScript作为一种强大的脚本语言&#xff0c…

go-zero学习笔记(二)

利用goctl生成api服务 编写api文件 //版本信息, import中的版本信息必须与被import的api版本信息一样 syntax"v1"// 支持引入其他api文件 // 这在多接口下非常有用 // 如果不可以引入,对于多接口情况,所有的接口写在同一个文件&…

嵌入式C语言:大小端详解

目录 一、大小端的概念 1.1. 大端序(Big-endian) 1.2. 小端序(Little-endian) 二、大小端与硬件体系的关系 2.1. 大小端与处理器架构 2.2. 大小端与网络协议 2.3. 大小端对硬件设计的影响 三、判断系统的大小端方式 3.1.…

npm cnpm pnpm npx yarn的区别

npm、cnpm、pnpm、npx、yarn 这几个工具都与 Node.js 项目的包管理和命令执行相关,它们的区别具体如下: 本质与功能定位 npm:是 Node.js 官方的包管理工具,提供了安装、卸载、更新、发布等全方位的包管理功能,还能通…

【数据结构】_C语言实现带头双向循环链表

目录 1. 单链表与双链表 1.1 单链表的结构及结点属性 1.2 双链表的结构及结点属性 2. 单链表与双链表的区别 3. 双链表的实现 3.1 List.h 3.2 List.c 3.3 Test_List.c 注:部分方法的实现细节注释 1. 双链表结点前驱、后继指针域的初始化 2. 各种增、删结…