Golang并发度控制
Golang并发度控制
重言Golang并发度控制
在Golang中可以通过channel去控制goroutine的并发度
举个例子:
1 | package main |
我们这里假设有10个任务要同时进行,然后我们的并发度设置为2,意味着在同一时间只有两个goroutine
能够执行,每个任务需要1秒的时间去执行,那么我们就需要5秒去执行整个代码。
深入思考一下,为什么在同一时间只有两个goroutine能够去执行,其他的goroutine要出去阻塞等待状态呢?
这里是通过channel去实现了一个信号量,这个是长度为2有缓冲的channel,那么最多只能放入两个信号量,也就意味着同时只能有两个groutine能执行。
当第三个groutine启动运行的时候,尝试向信号channel中写入信号,发现写不进去,就会陷入阻塞等待,直到有任务执行完成,对应的goroutine释放从信号channel中将信号读出。
这里将concurrence并发度设为5的话,就可以同时有5个groutine同时运行。
评论
匿名评论隐私政策
✅ 你无需删除空行,直接评论以获取最佳展示效果