[Go] 利用有缓存channel控制同时并发的数量
2023-02-18 15:47:28 时间
如果有一个大循环,里面每一个都开启groutine,那么瞬间就会开启非常多的groutine,要解决这个问题就要用channel的阻塞特性来解决
package main import "time" import "fmt" func main() { control := make(chan interface{}, 2) for i := 1; i <= 10; i++ { control <- i //这里应该放上面,如果放下面就会每次都执行三个了 go func(j int) { fmt.Printf("go func: %d, time: %d\n", j, time.Now().Unix()) time.Sleep(time.Second) <-control }(i) } //主groutine不要断 for { time.Sleep(time.Second) } }
go func: 2, time: 1574427632 go func: 1, time: 1574427632 go func: 4, time: 1574427633 go func: 3, time: 1574427633 go func: 5, time: 1574427634 go func: 6, time: 1574427634 go func: 7, time: 1574427635 go func: 8, time: 1574427635 go func: 9, time: 1574427636 go func: 10, time: 1574427636
看时间每次只是同时执行两个
相关文章
- 【Linux】curl: (60) SSL certificate problem: certificate has expired问题解决
- 【Golang】golang开发微信公众号网页授权功能
- 【Golang】golang实现简单memcache
- 【Golang】golang中time类型的before方法
- 【Golang】golang中map元素的删除和清空
- 【Golang】理解Golang中的time.Duration
- 【Golang】golang实现发送微信服务号模板消息
- 【Golang】golang实现sha256加密函数
- 【Golang】golang实现md5加密函数
- 【Golang】golang实现post请求发送form类型数据函数
- 【Golang】golang实现urlencode urldecode函数
- 【Golang】对接百度翻译API-golang版本sdk代码
- [golang] golang实现截取字符串函数SubStr
- 在线客服聊天系统源码_美观强大golang内核开发_二进制运行傻瓜式安装_附搭建教程
- [golang] 解决配置goland时候The selected directory is not a valid home for Go SDK
- [Golang] golang中使用正则表达式替换字符串
- [Golang] golang中使用正则表达式获取子字符串
- [Golang] Goland 编辑器 替换快捷键
- GOFLY智能在线客服系统更新日志: APP端历史访客分页功能更新 (2022-04-07)
- GOFLY智能在线客服系统更新日志: APP端历史访客列表增加搜索功能 (2022-04-07)