我写了一个虚拟代码来演示目的。
代码中有 2 个通道和 3 个协程。
1 goroutine 正在根据它们是否可以被 100 整除而没有余数来生成数字:
如果数字可以被 100 整除,则将其推送到第一个通道。
否则它会将它推到第二个通道。
2 个 goroutines 是这些通道的消费者:
1 个 goroutine 负责处理数字 1...99 - 101...199 等。
其他 goroutine 负责 100、200、300 等。
现在很明显,一个协程比另一个协程多 99 倍的工作要做。这在 Go 中是如何处理的?如果一个 goroutine 比其他 goroutine 工作得更多,这个 goroutine 是否有更多的 CPU 时间?还是我应该处理这种情况,例如为资源消耗量更大的频道创建 99 个 goroutine?(为了争论,这些工作被认为是相同的)
func main() {
ch1 := make(chan int)
ch2 := make(chan int)
go generator(ch1, ch2)
go handler(ch1)
go handler2(ch2)
time.Sleep(1*time.Second)
}
func generator(chan1, chan2 chan int){
for i:=0 ; ; i++{
if i%100 == 0{
chan1 <- i
}else{
chan2 <- i
}
}
}
func handler(number chan int){
for _ = range number{
num := <- number
fmt.Println("Number divided by 100 is 0. ", num)
}
}
func handler2(number chan int){
for _ = range number{
num := <- number
fmt.Println("Number divided by 100 is not 0. ", num)
}
}
largeQ
冉冉说
相关分类