ants 正在参加 2020 年度 OSC 中国开源项目评选,请投票支持!
ants 在 2020 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
投票让它出道
已投票
ants 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」 !
ants 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」「最积极运营项目」 !
ants 获得 2020 年度 OSC 中国开源项目评选「最积极运营项目」 !

软件简介

ants是一个高性能的协程池,实现了对大规模 goroutine 的调度管理、goroutine 复用,允许使用者在开发并发程序的时候限制协程数量,复用资源,达到更高效执行任务的效果。

功能

  1. 实现了自动调度并发的 goroutine,复用 goroutine
  2. 提供了友好的接口:任务提交、获取运行中的协程数量、动态调整协程池大小
  3. 资源复用,极大节省内存使用量;在大规模批量并发任务场景下比原生 goroutine 并发具有更高的性能

使用

写 go 并发程序的时候如果程序会启动大量的 goroutine ,势必会消耗大量的系统资源(内存,CPU),通过使用 ants,可以实例化一个协程池,复用 goroutine ,节省资源,提升性能:

package main

import (
"fmt"
"sync"
"sync/atomic"

"github.com/panjf2000/ants"
"time"
)

var sum int32

func myFunc(i interface{}) error {
n := i.(int)
atomic.AddInt32(&sum, int32(n))
fmt.Printf("run with %d\n", n)
return nil
}

func demoFunc() error {
time.Sleep(10 * time.Millisecond)
fmt.Println("Hello World!")
return nil
}

func main() {
runTimes := 1000

// use the common pool
var wg sync.WaitGroup
for i := 0; i < runTimes; i++ {
wg.Add(1)
ants.Submit(func() error {
demoFunc()
wg.Done()
return nil
})
}
wg.Wait()
fmt.Printf("running goroutines: %d\n", ants.Running())
fmt.Printf("finish all tasks.\n")

// use the pool with a function
// set 10 the size of goroutine pool
p, _ := ants.NewPoolWithFunc(10, func(i interface{}) error {
myFunc(i)
wg.Done()
return nil
})
// submit tasks
for i := 0; i < runTimes; i++ {
wg.Add(1)
p.Serve(i)
}
wg.Wait()
fmt.Printf("running goroutines: %d\n", p.Running())
fmt.Printf("finish all tasks, result is %d\n", sum)
}
展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论 (7)

加载中
潘少online软件作者
打分: 力荐
关于性能对比和其他更详细的信息可以到github上看:https://github.com/panjf2000/ants
2018/09/19 14:04
回复
举报
抛开Go的哲学功特性,这个的应用场景是什么?
2018/09/19 11:56
回复
举报
打分: 力荐
golang不推荐池化协程
2018/09/19 11:53
回复
举报
为什么我觉得没有必要呢
2018/09/18 19:37
回复
举报
有点乱啊
2018/09/18 14:45
回复
举报
打分: 推荐
请问有性能的对比吗?
2018/09/18 10:12
回复
举报
打分: 推荐
提交任务时,能否设置超时时间?
2018/09/18 08:56
回复
举报
更多评论
暂无内容
发表了博客
2015/10/08 16:59

poj3565 Ants

题目描述: Ants Time Limit: 5000ms Memory Limit: 65536KB This problem will be judged on PKU. Original ID: 3565 64-bit integer IO format: %lld Java class name: Main Prev Submit Status Statistics Discuss Next Type: None None Graph Theory 2-SAT Articulation/Bridge/Biconnected Component Cycles/Topological Sorting/Strongly Connected Component Shortest Path Bellman Ford Dijkstra/Floyd Warshall Euler ...

0
0
发表了博客
2018/08/22 18:06

[转]ANTS Performance Profiler和ANTS Memory Profiler 使用

.NET性能调优之一:ANTS Performance Profiler的使用 .NET性能调优系列文章 系列文章索引 .NET性能调优之一:ANTS Performance Profiler的使用 .NET性能调优之二:使用Visual Studio进行代码度量 .NET性能调优之三:YSlow相关规则的调优工具和方法 在使用.NET进行快速地上手与开发出应用程序后,接下来面临的问题可能就是程序性能调优方面的问题,而性能调优有时候会涉及方方面面的问题,如程序宿主系统、数据库、网络环境等等,...

0
0
发表了博客
2020/08/09 13:48

F - Ants CodeForces - 318D

题目戳我 早训的cf题目,当时一直没写出来但是知道怎么写一直调不出来就很烦,因为可能是负数,所以我们把(0,0)变成(1000,1000)结合题目给定的蚂蚁数量就再也不可能有负数出现了,先bfs预处理出所有蚂蚁的位置就很舒服了,可是细节不到位,写撮了。 #include<iostream> #include<stdio.h> #include<math.h> #include<string.h> #include<string> #include<vector> #include<queue> #include<algorithm> #include<deque> #includ...

0
0
发表了博客
2020/04/15 09:18

【纯水题】POJ 1852 Ants

题目大意 有一根长\(L\)厘米米的水平木棍上有\(n\)个蚂蚁,它们以每秒1cm/s的爬(fei)行(ben)到木棍的一端,之后掉下去。 给出每个蚂蚁的起始位置,但是不知道它们爬行的方向。相向而行的两只蚂蚁相遇后,它们都会掉头往反方向走。 求所有蚂蚁都落下木棍的最大时间和最小时间。 输入格式 先给出数据组数\(T\)。 每组第一行给出木棍长度\(L\)和蚂蚁数量\(n\)(\(1\le n\le 1000000\))。 第二行给出每个蚂蚁距离木棍左端\(x\)米。 ...

0
0
发表了博客
2018/05/28 21:47

【思维题】AGC013C - Ants on a Circle

妙妙技巧题 题目描述 题目大意 一个圆环上有n只蚂蚁,它们会按照顺时针或者逆时针行走。如果有蚂蚁相遇它们就会掉头(不一定在整数时间掉转)。问最后每只蚂蚁的位置。 题目分析 以前在luogu上做过一道类似的掉头问题,于是考试时候就很大意地把它压在最后做了…… 我们考虑一下,这n只蚂蚁的相对位置其实是不会改变的,并且我们可以算出最终所有蚂蚁的位置。 那应该如何计算第一只蚂蚁最后的顺序呢? 想象在n-1到0之间有一只哨...

0
0
2020/12/22 16:37

ants-client-ANTS框架客户端-['Balz Aschwanden', 'Jan Welker', 'Client Services Team of the University o...

ants-client-ANTS框架客户端-['Balz Aschwanden', 'Jan Welker', 'Client Services Team of the University of Basel IT Services'] 发布:2020-12-22 16:37:34.240373 作者:['Balz Aschwanden', 'Jan Welker', 'Client Services Team of the University of Basel IT Services'] ### 作者邮箱:balz.aschwanden@unibas.ch, jan.welker@unibas.ch ### 首页:https://ants-framework.github.io/ ### 文档:None ### 下载链接 ==...

0
0
发表了博客
2018/03/05 21:15

【AGC013C】Ants on a Circle 弹性碰撞

题目大意   一个长度为$lm$的环上有$n$只蚂蚁,告诉你每只蚂蚁的位置和朝向,每只蚂蚁会向前爬,速度为$1m/s$,两只蚂蚁相遇后都会掉头,问你$t$秒后每只蚂蚁的位置。   $n\leq 100000$ 题解   ypl大神把这个东西叫做弹性碰撞。有两个定理:    ypl定理1:如果忽略个体之间的差异, 那么每个物体的运动可以看作是独立的。    ypl定理2:如果不忽略个体之间的差异, 那么物体之间的相对顺序不会发生改变。   如果这不...

0
0
发表于大前端专区
2019/12/30 21:53

桌面小蚂蚁(12-Ants) v4.04绿色免费版

点击上方蓝字 记得关注我们哦! 软件介绍 桌面小蚂蚁12-Ants是一款简单易用的电脑桌面小工具,这款软件并没有任何的功能,只是一款单纯放松娱乐的小软件,打开软件后你会发现许多只蚂蚁在你的电脑中爬行,非常的有趣。启动软件以后就会有很多蚂蚁在你的桌面移动,对于喜欢个性化桌面效果的朋友很适合,这款软件支持的蚂蚁数量很多,可以设置一只蚂蚁,可以设置五十只蚂蚁,移动速度也可以手动控制,蚂蚁颜色也可以调整。该软件是...

0
0
发表了博客
2019/03/28 21:31

Ants 二分图带权最小匹配

Ants Solution: 此题最重要的是转化题意! 直接上图(图中红色才是正确方案): 这是一种很简单的情况,但是却告诉了我们很重要的信息。 仔细观察,可以发现,似乎最优方案的两两间连的边,距离值和最小! 那么,找一组连边方案,使得两两距离值和最小必然是最优方案。 为什么会这样呢, 其实是因为只要有相交的边,就会构成类似上图的‘X’型, 那么就必定会存在两个三角形,相交的边一起构成两个三角形中的两边,必然大于其对...

0
0
发表于大前端专区
2018/12/27 10:42

ants-react-scripts 帮助构建 Antd 项目

# [antd-react-scripts](https://www.npmjs.com/package/antd-react-scripts)开箱即用基于 create-react-app 搭建 antd 项目。 ## 特性 - 开箱即用 - 无需配置 babel-plugin-import 和 less-loader 配置 - 通过在项目根目录下添加 antd.theme.js 文件轻松定制主题...

0
0
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
暂无内容
7 评论
37 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部