Go之簡單併發

2022-02-06 14:27:59 字數 612 閱讀 3221

func calculate(id int)

使用go來實現併發

func main() 

time.sleep(1e9 * 2)  //等待程式執行結束,避免無輸出

}

上面**是最基礎的併發,使用time.sleep做超時等待,將上面的超時等待換成sync.waitgroup

func main() (i)

} wg.wait()

}

waitgroup用於等待一組執行緒的結束。父執行緒呼叫add方法來設定應等待的執行緒的數量。每個被等待的執行緒在結束時應呼叫done方法。同時,主線程裡可以呼叫wait方法阻塞至所有執行緒結束。

如果wg.add方法的數值大於go語句的執行次數,將發生死鎖

在併發中可以使用runtime.gosched()來實現延遲執行(這裡在1.5中測試,貌似沒有任何反應),但是使用runtime.goexit()可以實現終止當前執行緒的執行
func main() 

calculate(i)

} }()

go func() ()

wg.wait()

}

Go語言的併發簡單總結

goexit結束當前goroutine,會呼叫defer,不會產生panic 1.6.扇入扇出 fan in fan out 1.7 通知退出機制 通知退出機制是學習使用context庫的基礎 lable for 2.併發正規化 2.1 生成器 2.2 管道 輸入輸出都是chan的時候,鏈式呼叫 2...

Go之併發處理(售票問題)

老問題 模擬乙個售票視窗進行售票 先定義型別ticket 車票 和conductor 銷售員 偷懶了,把售票和產票都交給conductor了 package util import type ticket struct type conductor struct func newconductor ...

go語言修煉之六 併發

尾聲每後乙個機制,都進一步優化了系統開銷,即 多程序的併發,消耗系統資源最多。多執行緒的併發,消耗系統資源次多。多協程的併發,消耗系統資源最少。最後的協程方式,就是go語言特有的,也是go號稱的特點之一。使用很簡單。用關鍵字 go 在當前主程中開啟協程。package main import fmt...