[Go]キャッシュチャネルによる同時同時同時同時同時制御数
3765 ワード
大きなループがあり、中のどれもがgroutineを開くと、瞬時に非常に多くのgroutineが開き、この問題を解決するにはchannelのブロック特性で解決しなければなりません.
時間を見るたびに2つだけ同時に実行されます
package main
import "time"
import "fmt"
func main() {
control := make(chan interface{}, 2)
for i := 1; i <= 10; i++ {
control // ,
go func(j int) {
fmt.Printf("go func: %d, time: %d
", 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
時間を見るたびに2つだけ同時に実行されます