優雅結束goroutine的幾種方法

2022-08-14 08:00:25 字數 876 閱讀 1208

執行完直接結束

1

func routine1()

45 func testroutine1(t *testing.t)

等待協程執行完成後結束

1 func routine2(wg *sync.waitgroup) 

67 func testroutine2(t *testing.t)

傳送chan資訊結束協程執行

1 func routine3(stop chan bool

) 11}12

}1314 func testroutine3(t *testing.t)

關閉chan通知協程結束執行

1 func routine4(info chan int

) 9 fmt.println("

routine recv info ..

" +strconv.itoa(info))

10default

:11 fmt.println("

goroutine running ...")

12 time.sleep(2 *time.second)13}

14}15}

1617 func testroutine4(t *testing.t)

通過context通知協程結束

1

func routine5(ctx context.context) 11}

12}1314 func testroutine5(t *testing.t)

參考:4.9 理解 go 語言中的 context

如何優雅的控制goroutine的數量

1,為什麼要控制goroutine的數量?goroutine固然好,但是數量太多了,往往會帶來很多麻煩,比如耗盡系統資源導致程式崩潰,或者cpu使用率過高導致系統忙不過來。比如 1 for i 0 i 10000 i 2,用什麼方法控制goroutine的數量?要在每一次執行go之前判斷gorout...

Go程式設計技巧 Goroutine的優雅控制

原文 go程式設計技巧 goroutine的優雅控制 goroutine是go語言最重要的機制,goroutine將複雜的需要非同步的io呼叫抽象成同步呼叫,符合人類正常的順序思維,極大的簡化了io程式設計的難度。如同執行緒一樣,對goroutine既要掌握基本的用法,更要很好的控制goroutin...

C 如何優雅的結束乙個執行緒

有乙個無線迴圈的執行緒需要時時接收資料,如下 class eventclass event recedatasdone?invoke this,eventargs.empty public void stoprecedatas class program ec.startrecedatas syst...