好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > Go語言 go程釋放操作(退出/銷毀)

Go語言 go程釋放操作(退出/銷毀)

熱門標簽:外呼系統顯本地手機號 壽光微信地圖標注 阿克蘇地圖標注 excel地圖標注分布數據 評價高的400電話辦理 電話機器人軟件免費 百度地圖標注后傳給手機 外呼系統用什么卡 涿州代理外呼系統

情況1:

Go語言中,若在子go程中創建一個新 go程,子go程釋放(銷毀),新創建的go程不會隨著子go程的銷毀而銷毀。

原因:

go程共享堆,不共享棧,go程由程序員在go的代碼里顯示調度(釋放)。

實例:

package main
import (
	"fmt"
	"time"
	"runtime"
)
func test()  {
	for i:=0;i10;i++{
		fmt.Printf("執行第%d次go程\n",i)
		time.Sleep(time.Second)
	}
	fmt.Println("go程執行完畢!")
}
func main() {
	go func() {
		go test()
		fmt.Println("------aaaaaaaa-------")
		time.Sleep(time.Second)
		fmt.Println("------go程結束--------------")
		/*
		   不管是return  還是  runtime.Goexit(),效果一樣
		*/
		//return
		runtime.Goexit()
 
	}()
	for{
		runtime.GC()
	}
}

從以上實例來看,雖然子go程已經退出,但是在子go程中新建的go程還在執行!原因:go程不共享棧,有自己獨立的棧空間。子go程有自己的棧,在子go程中創建的新go程也有自己的棧。

子go程的棧被釋放(回收),由于棧獨立,因此新創建的go程的棧不會被釋放。

情況2:

Go語言中,若在主go程中創建一個新 go程,主go程釋放(銷毀),新創建的go程隨著主go程的銷毀而銷毀。

原因:

go程共享堆,不共享棧,go程由程序員在go的代碼里顯示調度(釋放)。

實例:

package main
 
import (
	"fmt"
	"time"
)
func main() {
	go func() {
		for i:=0;i10;i++{
			fmt.Printf("子go程:執行第%d次操作!\n",i)
			time.Sleep(time.Second)
		}
	}()
	for i:=0;i3;i++{
		fmt.Println("--------aaaa------")
		time.Sleep(time.Second)
	}
}

從以上實例來看,雖然主go程退出,子go程馬上退出。原因:go程共享堆。主go程和新創建的子go程共享一個堆。主go程退出,執行main對應的{ },堆退出。由于是共享堆,所以對應的子go程也會被銷毀。

補充:go基礎之服務退出問題

最近學習公司微服務的代碼,看到每一個微服務的main函數都阻塞在那里,然后里面起的goroutine一直在哪里運行。

package main
import(
    "fmt"
    "os"
    "os/signal"
    "syscall"
    "log"
    "time"
)
func testFunc() error {
    go func(){
        for{
           fmt.Printf("testing....\n")
           time.Sleep(time.Minute)
        }
    }()
    return nil
}
func exitFunc(){
    fmt.Println("i am exiting!")
}
func main(){
    logger := log.New(os.Stdout, "[TestGoroutine]", log.Lshortfile | log.Ldate | log.Ltime) //初始化日志
    exit := make(chan os.Signal,10) //初始化一個channel
    signal.Notify(exit, syscall.SIGINT, syscall.SIGTERM) //notify方法用來監聽收到的信號
    testFunc()
    sig := -exit
    logger.Printf("%s",sig.String())
    exitFunc()
}

代碼輸出

[root@localhost demoproject]# go run test.go

testing....

^C[TestGoroutine]2018/07/31 19:26:14 test.go:36: interrupt

i am exiting!

可以看到知道按了ctrl+c之后才退出main函數的運行。然后goroutine隨之停止運行。

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

您可能感興趣的文章:
  • golang 阻止主goroutine退出的操作
  • Golang實現超時退出的三種方式
  • Golang信號處理及如何實現進程的優雅退出詳解
  • Golang實現for循環運行超時后自動退出的方法
  • 解決go在函數退出后子協程的退出問題

標簽:欽州 雞西 蘭州 梅河口 吐魯番 汕頭 銅川 重慶

巨人網絡通訊聲明:本文標題《Go語言 go程釋放操作(退出/銷毀)》,本文關鍵詞  語言,程釋放,程,釋放,操作,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Go語言 go程釋放操作(退出/銷毀)》相關的同類信息!
  • 本頁收集關于Go語言 go程釋放操作(退出/銷毀)的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 欧美用舌头去添高潮视频| 狠狠人妻久久久久久综合蜜桃| 亚洲欧美日韩中另类在线| 久久久久久久久久久精品尤物| 女教师在办公室被躁| 婬色kkkk4444免费视频| 把腿张开老子臊烂你的小说| 青草视频污| 日韩欧美国产精品白浆高潮| 日本成片免费高清| 少妇又紧又爽又丰满A片小说| 火辣人妻-ThePorn| 亚洲欧美日本在线| 成日本黄页免费网站| 66精品| 真实破女处高清播放| 亚洲精品高清国产一线久久97| 诱惑パンスト痴女波多野结衣| 欧美日韩久久久精品A片| 亚洲日韩精品秘?在线观看| 国产91?边播边对白| 免费黄色电影| 欧洲激情| 办公室浪荡女秘高h| 武则天秘史三片完整| 国产日韩欧美成人| 狠狠色噜噜狠狠狠888米奇| 国产激情视频| 国自产一线在区| 久久99草| 女人脱了内裤让男人添j| 樱花动漫 官方入门网站| 国产欧美熟妇另类久久久| 麻豆国产秘?网站入口| 亚洲 欧美 国产 日韩 制服| 国产精品久久久久久一区二区| 久草视频| 水密桃隐私视频网站| 日出水了啊快点使劲动态图| 久久久久亚洲AV色欲av| 麻豆国产AV国片精品理伦片观看|