久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

      go語言中控制并發(fā)數(shù)量的方法

      go語言中控制并發(fā)數(shù)量的方法

      因?yàn)間o語言層面支持并發(fā),所以面試中經(jīng)常會問到并發(fā)的問題,比如說控制go并發(fā)數(shù)量的方式有哪些?下面是我個人整理的兩個例子:

      func waitGroup() {     count := 10     wg := sync.WaitGroup{}      for i := 0; i < count; i++ {         wg.Add(1)         go func(j int) {             fmt.Print(j)             wg.Done() // 也可使用 wg.Add(-1)         }(i)     }      wg.Wait() }

      上面主要用到的是go中sync包下的waitGroup,這也是在工作中比較常見的實(shí)現(xiàn)方式,關(guān)鍵點(diǎn)就是把握好Add方法的位置,Wait方法則是等待所有的協(xié)程執(zhí)行完畢

      func channel() {     count := 10 // 最大支持并發(fā)     sum := 100 // 任務(wù)總數(shù)      c := make(chan struct{}, count) // 控制任務(wù)并發(fā)的chan     sc := make(chan struct{}, sum) // 控制任務(wù)總數(shù)的chan     defer close(c)     defer close(sc)      for i:=0; i<sum;i++{         c <- struct{}{} // 作用類似于waitgroup.Add(1)         go func(j int) {             fmt.Println(j)             <- c // 執(zhí)行完畢,釋放資源             sc <- struct {}{} // 記錄到執(zhí)行總數(shù)里         }(i)     }      for i:=sum; i>0;i-- {         <- sc     } }

      上面的例子用到的是go中的channel,利用channel阻塞的特性和帶緩沖的channel來實(shí)現(xiàn)控制并發(fā)數(shù)量,其中sc這個channel是可以去掉的,例子里用只是為了防止主程序退出之后,沒有全部輸出,正常工作中,程序一般都是阻塞式的,所以可以去掉。

      贊(0)
      分享到: 更多 (0)
      ?
      網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號