日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

关于go在函数退出后子协程的退出问题

發布時間:2024/3/12 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于go在函数退出后子协程的退出问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

關于go在函數退出后子協程的退出問題

該問題來源于自己在讀fabric源碼時,看到的一個測試代碼,在一個函數中啟用協程,然后該函數退出了,由于平常沒有這樣處理過,以及受原有c++函數域的影響,認為函數退出,子協程應該也退出了呀。
這其實是自己對go協程的理解不到位引起的,go的協程作用域不是在某個函數中的,當然,如果那個函數是main函數,就符合要求了。

該代碼為solo算法的測試代碼:

func goWithWait(target func()) *waitableGo {wg := &waitableGo{done: make(chan struct{}),}go func() {target()//該協程會阻塞在這close(wg.done)//用來對外通知}()//外邊結束,里邊還不結束嗎?return wg } // This test checks that if consenter is halted before a timer fires, nothing is actually written. func TestHaltBeforeTimeout(t *testing.T) {batchTimeout, _ := time.ParseDuration("1ms")//support的構造還不清楚support := &mockmultichannel.ConsenterSupport{Blocks: make(chan *cb.Block),BlockCutterVal: mockblockcutter.NewReceiver(),SharedConfigVal: &mockconfig.Orderer{BatchTimeoutVal: batchTimeout},}defer close(support.BlockCutterVal.Block)bs := newChain(support)//bs.main是solo算法的啟動函數,是個死循環,處理函數wg := goWithWait(bs.main)defer bs.Halt()//中止syncQueueMessage(testMessage, bs, support.BlockCutterVal)bs.Halt()select {case <-support.Blocks:t.Fatalf("Expected no invocations of Append")case <-wg.done:} }

遇到該問題后,我寫了幾個測試:
單純的函數退出,是不會影響協程的

package mainimport "fmt"var ch chan intfunc test() int {ch = make(chan int)go func() {for {fmt.Println(<-ch)fmt.Println("hello")}fmt.Println("aaaa")}()//不阻塞,那go func()不會異常退出嗎?//協程并不是函數,不會因為這個函數的退出而退出//test()啟動一個deadloop子協程,這個會在主協程main結束后被強制退出return 0 } func main() {c := test()ch <- 10fmt.Println("c", c) }

我經常在main里邊直接寫協程的測試demo,main退出會結束主協程,之后會強制結束子協程,一般不會遇到上述在普通函數退出的問題,也沒仔細思考,所以分析源碼時有點困惑。


子協程啟動子協程,父協程的退出,并沒有影響到子協程

liudeMacBook-Pro:~ liu$ cat tmp.go package main import ("fmt""time" ) func test() {go func() { //父協程defer func() {fmt.Println("exit dad")}()go func() { //子協程defer func() {fmt.Println("exit kid")}()}()}() } func main() {test()time.Sleep(time.Second) } liudeMacBook-Pro:~ liu$ go run tmp.go exit dad exit kid

總結

以上是生活随笔為你收集整理的关于go在函数退出后子协程的退出问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 三级网站视频 | 国产一区二区三区18 | 天天舔天天射 | 一区二区三区在线观看 | 亚洲欧美在线综合 | 人人爽人人射 | 91精品人妻一区二区三区果冻 | 麻豆av一区二区三区在线观看 | 欧美精品在欧美一区二区 | 亚洲片国产一区一级在线观看 | 成人av久久 | 亚洲午夜精品久久 | 另类小说一区二区 | 日韩欧美在线视频播放 | 日韩精品在线免费视频 | 日本亚洲一区二区三区 | 国产伊人自拍 | 97精品人妻一区二区三区香蕉 | 夜夜嗨av一区二区 | 日本女v片 | 欧美一卡二卡 | 午夜精品视频 | 婷婷四月 | 欧美色亚洲 | av一区二区三区在线观看 | 日本动漫艳母 | 日本女优网址 | 国产婷婷在线观看 | 91亚洲精品久久久蜜桃网站 | 国产尤物| 无码人妻丰满熟妇区毛片蜜桃精品 | 四虎网站最新网址 | 97福利网| 午夜在线国产 | 国产av精国产传媒 | 日韩一级片在线 | 成人黄色大片在线观看 | a免费在线 | 九九九九九精品 | 手机看片久久久 | 久久精品无码专区免费 | 4hu最新网址| 在线免费看黄色片 | 欧美黄色一级大片 | 日韩中文在线观看 | 国产黄色在线免费观看 | 白白色在线观看 | 亚洲高清二区 | 天天操天天爽天天干 | 青草久久久 | 国产av电影一区 | 久久奇米 | 国产色中色 | 日韩成人精品视频 | 精品人妻少妇嫩草av无码 | 一二级毛片 | 开心激情播播 | 日韩最新视频 | 国产精品jizz在线观看老狼 | 日本久久网站 | 日韩欧美视频网站 | 欧美大片a| 打屁股调教视频 | 国产综合福利 | 高级家教课程在线观看 | 免费在线观看视频 | 婷婷六月天| 超碰人人爱人人 | 国产成人免费在线 | 日韩欧美国产一区二区三区在线观看 | 99热免费在线观看 | 国产综合在线视频 | 一级黄色播放 | sm调教羞耻姿势图片 | 女人被男人操 | 僵尸叔叔在线观看国语高清免费观看 | 西西人体大胆4444ww张筱雨 | 国产又大又粗又爽的毛片 | 激情综合六月 | 亚洲伊人婷婷 | 日韩r级电影在线观看 | 日本免费在线播放 | 91精品人妻一区二区三区蜜桃2 | 中文在线免费观看 | 欧美深性狂猛ⅹxxx深喉 | 极品丰满少妇 | 国产无遮挡又黄又爽在线观看 | 天堂中文在线最新 | 天天爽天天爱 | 国产又粗又深又猛又爽又在线观看 | 欧美一级性生活 | 国产精品免费网站 | 亚洲欧美一区二区三区四区 | 性一交一乱一透一a级 | 国产夫妻性爱视频 | 欧美做受xxxxxⅹ性视频 | 极品尤物魔鬼身材啪啪仙踪林 | 国内一区二区 | 一级黄网|