首页 > 后端开发 > Golang > Goroutines、用户线程和内核线程:有什么区别?

Goroutines、用户线程和内核线程:有什么区别?

Susan Sarandon
发布: 2024-12-10 09:35:11
原创
280 人浏览过

Goroutines, User Threads, and Kernel Threads: What's the Difference?

区分 Goroutines、用户线程和内核线程

简介

goroutine 的概念在探索时,用户线程和内核线程可能会令人困惑Go 的并发模型的复杂性。本文旨在阐明这些概念并解决相关问题。

问题 1:定义操作系统线程和 Goroutines

问题:

  • 《Effective Go》介绍中提到了 goroutine。 “操作系统线程”指的是什么?是用户线程还是内核线程?

答案:

  • “操作系统线程”指的是内核线程。

问题2:理解Go中的P和G调度器

问题:

  • 为什么P(处理器/调度上下文)的数量等于CPU核心的数量?
  • 如果所有 CPU 都在为 Go 程序提供服务,那么操作系统中需要 CPU 的其他程序会发生什么情况分配?

答案:

  • P 作为 goroutine 和内核线程之间的映射层。每个内核线程有一个 P。
  • Go 程序默认可以分配所有可用的 CPU 核心(GOMAXPROCS),但这并不妨碍其他操作系统进程的执行。即使并发操作,进程也会花费大量时间等待 I/O 操作,从而允许内核调度程序将 CPU 时间分配给其他程序。

问题 3:内核线程数生成

问题:

  • OS系统生成了多少个内核线程?

答案:

  • 号码操作系统创建的内核线程的数量是动态的,取决于系统负载。

以上是Goroutines、用户线程和内核线程:有什么区别?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板