Golang使用有缓冲channel实现协程池限制最大协程数量
Golang 实现 最大 限制 数量 协程 channel 缓冲
2023-09-27 14:25:41 时间
码字不易,转载请附原链,搬砖繁忙回复不及时见谅,技术交流请加QQ群:909211071
package main
import (
"fmt"
"strconv"
"time"
"sync"
)
var (
maxRoutineNum = 3
)
type Duration int64
const (
Nanosecond = 1
Microsecond = 1000 * Nanosecond
Millisecond = 1000 * Microsecond
Second = 1000 * Millisecond
Minute = 60 * Second
Hour = 60 * Minute
)
var wg sync.WaitGroup
func action(data string, ch chan int) {
defer wg.Done()
fmt.Println(data)
time.Sleep(Second)
<-ch
}
func main() {
ch := make(chan int, maxRoutineNum)
datas := [10]string{}
for i := 0; i < 10; i++ {
datas[i] = strconv.Itoa(i)
}
for i := 0; i < len(datas); i++ {
ch <- 1
wg.Add(1)
go action(datas[i], ch)
}
wg.Wait()
}
相关文章
- Golang死信队列的使用
- 利用golang优雅的实现单实例
- golang 自动下载所有依赖包
- Golang测试技术
- golang利用切片实现栈操作,附例子
- windows下无npcap驱动导致golang获取网卡失败问题
- Golang学习途径总结
- 浅析Golang map的实现原理
- [golang]按图片中心旋转后的新图左顶点和原图左顶点的偏移量计算
- Golang 实现 Redis(10): 本地原子性事务
- Golang 实现 Redis(9): 使用GeoHash 搜索附近的人
- golang(4)使用beego + ace admin 开发后台系统 CRUD
- Golang 基于excelize实现Excel表格的解析、导出
- Golang 通过Image包实现图片处理、二维码生成
- golang 三目运算的实现
- 使用golang实现栈(stack)
- Golang 中错误与异常需要重新认识
- 深入理解 Linux 零拷贝以及 Linux 中 I/O 的底层原理,在kafka、nginx、golang等等各种文件传输场景中不同的优化手段和实际应用