type
status
category
date
slug
summary
tags
password
icon
在 Golang 中可以通过 channel 去控制 goroutine 的并发度
📝 主旨内容
eg:
我们这里假设有 20 个任务要同时进行,然后我们的并发度设置为 2,意味着在同一时间只有两个
goroutine 能够执行,每个任务需要 1 秒的时间去执行,那么我们就需要 10 秒去执行整个代码。深入思考一下,为什么在同一时间只有两个 goroutine 能够去执行,其他的 goroutine 要出去阻塞等待状态呢?
这里是通过 channel 去实现了一个信号量,这个是长度为 2 有缓冲的 channel,那么最多只能放入两个信号量,也就意味着同时只能有两个 groutine 能执行。
当第三个 groutine 启动运行的时候,尝试向信号 channel 中写入信号,发现写不进去,就会陷入阻塞等待,直到有任务执行完成,对应的 goroutine 释放从信号 channel 中将信号读出。
这里将 concurrence 并发度设为 5 的话,就可以同时有 5 个 groutine 同时运行。
- 作者:Guxi8086
- 链接:https://Guxi8086.com/article/1-47
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
