素手烹茶|- 高性能低损耗的 Goroutine 池,Ants
Go语言最大的特色之一 , 就是其从语言的层面支持并发 。 Go语言使用了其特有的goroutine作为最基本的并发执行单元 , 以协程的方式 , 实现了更加轻量和高效的并发执行 。 然而 , goroutine缺乏一个高级的管理机制 , 原生情况下使用 , 要实现动态调整数量、内存资源复用、错误处理等 , 往往需要编写比较多的底层代码逻辑 。 Ants , 这个goroutine池实现 , 提供了对于大规模goroutine的管理功能 , 相比原生实现 , 资源使用率和执行性能都有了很大的提升 。
goget-ugithub.com/panjf2000/antsv2版本需要使用gomodule支持 , 开启GO111MODULE=on:
goget-ugithub.com/panjf2000/ants/v2
funcSubmit(taskfunc())error通过提供一个函数类型的任务参数 , 来把任务提交到工作池执行 。 我们来看一个简单的使用例子:
packagemainimport("fmt""sync""time""github.com/panjf2000/ants/v2")funcdemoFunc(){time.Sleep(10*time.Millisecond)fmt.Println("HelloWorld!")}funcmain(){deferants.Release()runTimes:=1000varwgsync.WaitGroupsyncCalculateSum:=func(){demoFunc()wg.Done()}fori:=0;i<runTimes;i++{wg.Add(1)_=ants.Submit(syncCalculateSum)}wg.Wait()fmt.Printf("runninggoroutines:%dn",ants.Running())fmt.Printf("finishalltasks.n")}在这个例子中 , 定义了一个简单的任务函数demoFunc , 短暂休眠后打印HelloWorld 。 在main函数中 , 使用了sync.WaitGroup来进行并发控制 , 把demoFunc包裹成为一个并发任务函数syncCalculateSum 。 我们要把这个任务执行1000次 , 就可以通过循环 , 进行1000次的ants.Submit调用 , 把所有任务都提交到工作池执行 。 提交完成后 , 等待任务完成 。 程序在完成了1000次的HelloWorld打印后 , 最终完成了任务执行 。
推荐阅读
- 素手烹茶|Redis 事务也叫事务吗?,不支持原子性的
- 素手烹茶|Pro体验:敢越级超轻薄的5G天玑旗舰,realme真我X7
- 素手烹茶|速度为之乍舌,一天一价已是常事,华为手机价格疯狂上涨
- 素手烹茶|| 奔驰、小米正式牵手!雷军:这是自己十分期待的合作,资讯
- 百知先生|Yotta企业云盘:高安全高性能的分布式存储
- 浪浪科技精选|Pro高颜值高性能买它不纠结,开学换机买什么?一加8
- 软件|用开源frp高性能反向代理软件实现内网穿透方案
- 素手烹茶|电脑小白求解
- PChome电脑之家|P5高性能SSD评测最高3400MB/s读取,Crucial
- 素手烹茶|以后买手机千万要注意,手机变卡顿的真正元凶居然是它