栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Go语言

go-主goroutine 结束后,子goroutine也立即结束?

Go语言 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

go-主goroutine 结束后,子goroutine也立即结束?

文章目录
  • main goroutine结束,子goroutine立即结束
  • main函数如果不结束,父函数即使结束,父函数中的goroutine也会执行
  • main函数如果不结束,父goroutine即使结束,父goroutine中的子goroutine也会执行
  • 结论

main goroutine结束,子goroutine立即结束
package main

import (
	"fmt"
	"time"
)

func main() {
	// main函数中goroutine如果结束,子goroutine不会再执行
	fmt.Println("main函数开始")
	go func() {
		time.Sleep(1 * time.Second)
		fmt.Println("main中子goroutine结束")
	}()
	fmt.Println("main函数结束")
}


这段带代码,子goroutine的“fmt.Println(“main中子goroutine结束”)”没有执行。即main goroutine结束,子goroutine立即结束。
平时测试都是在main函数测试,即main goroutine结束,子goroutine立即结束。给人造成了父goroutien结束,子goroutine也要理解结束的假象。实际却不是这样的。

main函数如果不结束,父函数即使结束,父函数中的goroutine也会执行
package main

import (
	"fmt"
	"time"
)

func main() {
	// main函数如果不结束,父函数即使结束,父函数中的goroutine也会执行
	fmt.Println("main函数开始")
	notMainFunc()
	time.Sleep(3 * time.Second)
	fmt.Println("main函数结束")
}

func notMainFunc() {
	fmt.Println("notMainFunc开始")
	go func() {
		time.Sleep(1 * time.Second)
		println("notMainFunc中子goroutine结束")
	}()
	fmt.Println("notMainFunc结束")
}

上面的例子,main函数没结束之前,即使父函数结束,父函数中的子goroutine也会继续执行。

main函数如果不结束,父goroutine即使结束,父goroutine中的子goroutine也会执行
package main

import (
	"fmt"
	"time"
)

func main() {
	// main函数如果不结束,父goroutine即使结束,父goroutine中的子goroutine也会执行
	fmt.Println("main函数开始")
	go notMainFunc()
	time.Sleep(3 * time.Second)
	fmt.Println("main函数结束")
}

func notMainFunc() {
	fmt.Println("notMainFunc开始")
	go func() {
		time.Sleep(1 * time.Second)
		println("notMainFunc中子goroutine结束")
	}()
	fmt.Println("notMainFunc结束")
}


结论

只要main函数不结束,子goroutine会一直执行
main函数结束,子goroutine会立即结束

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/944463.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号