[Go]キャッシュチャネルによる同時同時同時同時同時制御数

3765 ワード

大きなループがあり、中のどれもがgroutineを開くと、瞬時に非常に多くのgroutineが開き、この問題を解決するにはchannelのブロック特性で解決しなければなりません.
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つだけ同時に実行されます