博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Go語言協程數目控制
阅读量:7081 次
发布时间:2019-06-28

本文共 663 字,大约阅读时间需要 2 分钟。

hot3.png

Go语言有天生良好的多并发特征,依赖goroutines可以很好的实现多并发功能。但是,在多并发之下,控制goroutines的数量,也是需要考虑的问题。如果不限制goroutines,在较大量的goroutines影响下可能会消耗较多的CPU单元、内存、磁盘IO和网络性能。   控制的方法也很简单,可以通过channal方式限制。如下例:  

func main() {    var wg sync.WaitGroup    // 生成token    tokens := make(chan int, 5)    for i := 0; i < 20; i++ {        // 获取        tokens <- 1        wg.Add(1)        go func() {            time.Sleep(1000 * time.Millisecond)            fmt.Println("go is here!")            // 缴回            <-tokens            defer wg.Done()        }()    }    wg.Wait()}

 

  则可以比较好的控制运行,除此之外,也可以更简单的使用CPU单元来限制,只需要替换一句:
tokens := make(chan int, runtime.NumCPU())

转载于:https://my.oschina.net/goulang/blog/174084

你可能感兴趣的文章
无法远程登入MySQL数据库的几种解决办法
查看>>
我的友情链接
查看>>
基于keepalived构建 LVS-DR的主主模型(二)
查看>>
virtualbox 安装 MacOS
查看>>
S2750/S5700/S6700系列以太网交换机 配置指南-基础配置--文件管理
查看>>
Iptables学习笔记和快速入门手册
查看>>
装win 10 没网的几大解决办法
查看>>
思科路由与交换系列--------NA系列
查看>>
简单的Spring+CXF例子
查看>>
Cacti+Nagios简介
查看>>
oracle表分区详解
查看>>
myeclipse不足的问题
查看>>
Wireshark抓包工具使用教程以及常用抓包规则
查看>>
我的大四下半学期
查看>>
递归调用例题
查看>>
风险控制的三种实践
查看>>
redis***事件
查看>>
我的友情链接
查看>>
python之psutil模块
查看>>
Python开发必学课程知多少?
查看>>