登录
首页 >  Golang >  Go问答

操作系统线程数量是否会减少取决于Go进程?

来源:stackoverflow

时间:2024-03-05 21:21:30 426浏览 收藏

本篇文章给大家分享《操作系统线程数量是否会减少取决于Go进程?》,覆盖了Golang的常见基础知识,其实一个语言的全部知识点一篇文章是不可能说完的,但希望通过这些问题,让读者对自己的掌握程度有一定的认识(B 数),从而弥补自己的不足,更好的掌握它。

问题内容

考虑一个在 GOMAXPROCS 值为 10 的系统上运行的 golang 程序。由于阻塞系统调用,操作系统生成了 30 个以上的线程,导致 40 个操作系统线程附加到该进程。

当所有被阻塞的系统调用返回后,进程还会有 40 个操作系统线程吗?如果是,那么我们是否可以得出结论,映射到 golang 进程的操作系统线程数量可以增长但永远不会下降?


解决方案


是的,当前由于阻塞的 goroutine 而产生的线程不会停止。有一个关于定期关闭空闲线程的讨论:runtime: let idle OS threads exit #14592

不过有一种方法可以杀死线程。如果您在 goroutine 中调用 runtime.LockOSThread() 而不调用其对应的 runtime.UnlockOSThread(),根据文档:

如果调用协程在没有解锁线程的情况下退出,则线程将被终止。

您也可以使用(来源:runtime: terminate locked OS thread if its goroutine exits #20395):

syscall.Syscall(syscall.SYS_EXIT, 0, 0, 0)

理论要掌握,实操不能落!以上关于《操作系统线程数量是否会减少取决于Go进程?》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>