ants

Go 语言的高性能协程池 ants

MIT
Google Go 查看源码»
跨平台
2018-07-02
潘少online

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)
}
的码云指数为
超过 的项目
加载中
此软件有 7 条评论,请先登录后再查看。

暂无资讯

暂无问答

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

.NET性能调优之一:ANTS Performance Profiler的使用 .NET性能调优系列文章 系列文章索引 .NET性能调优之一:ANTS Performance Profiler的使用 .NET性能调优之二:使用Visual Studio进行代码...

2018/08/22 18:06
48
0
【思维题】AGC013C - Ants on a Circle

妙妙技巧题 题目描述 题目大意 一个圆环上有n只蚂蚁,它们会按照顺时针或者逆时针行走。如果有蚂蚁相遇它们就会掉头(不一定在整数时间掉转)。问最后每只蚂蚁的位置。 题目分析 以前在luogu...

2018/05/28 21:47
25
0
【纯水题】POJ 1852 Ants

题目大意 有一根长\(L\)厘米米的水平木棍上有\(n\)个蚂蚁,它们以每秒1cm/s的爬(fei)行(ben)到木棍的一端,之后掉下去。 给出每个蚂蚁的起始位置,但是不知道它们爬行的方向。相向而行的两只...

04/15 09:18
36
0
【AGC013C】Ants on a Circle 弹性碰撞

题目大意   一个长度为$lm$的环上有$n$只蚂蚁,告诉你每只蚂蚁的位置和朝向,每只蚂蚁会向前爬,速度为$1m/s$,两只蚂蚁相遇后都会掉头,问你$t$秒后每只蚂蚁的位置。   $n\leq 100000$ ...

2018/03/05 21:15
12
0
POJ-3565 Ants---KM算法+slack优化

题目链接: https://vjudge.net/problem/POJ-3565 题目大意: 在坐标系中有N只蚂蚁,N棵苹果树,给你蚂蚁和苹果树的坐标。让每只蚂蚁去一棵苹果树, 一棵苹果树对应一只蚂蚁。这样就有N条直线...

2018/04/18 01:34
5
0
Ants 二分图带权最小匹配

Ants Solution: 此题最重要的是转化题意! 直接上图(图中红色才是正确方案): 这是一种很简单的情况,但是却告诉了我们很重要的信息。 仔细观察,可以发现,似乎最优方案的两两间连的边,...

2019/03/28 21:31
7
0
ants-react-scripts 帮助构建 Antd 项目

antd-react-scripts开箱即用基于 create-react-app 搭建 antd 项目。 特性 开箱即用 无需配置 babel-plugin-import 和 less-loader 配置 通过在项目根目录下添加 antd.theme.js 文件轻松定制...

2018/12/27 10:42
16
0
源码探索—【go 线程池】ants笔记 1 (真正的小白学源码)

文章目录 项目选择 初期的迷惑 迷惑点1:代码文件的逻辑? 迷惑点2:是什么促使了这个项目的诞生 迷惑点3:为什么选择了go语言? 进行中的学习历程 笔者认为的源码学习 接下来的更新计划 本文...

05/25 15:09
39
0
[CF1007D]Ants[2-SAT+树剖+线段树优化建图]

##题意 我们用路径 $(u, v)$ 表示一棵树上从结点 $u$ 到结点 $v$ 的最短路径。 给定一棵由 $n$ 个结点构成的树。你需要用 $m$ 种不同的颜色为这棵树的树边染色,在这 $m$ 种颜色中,第 $i$ ...

2018/12/19 15:04
11
0
2018牛客网暑假ACM多校训练赛(第十场)H Rikka with Ants 类欧几里德算法

原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round10-H.html 题目传送门 - https://www.nowcoder.com/acm/contest/148/H 题意   有两只蚂蚁在一个二维平面上走。...

2018/08/19 19:15
10
0

没有更多内容

加载失败,请刷新页面

返回顶部
顶部