首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Go运行时是否创建OS线程(M)?

Go运行时是否创建OS线程(M)?
EN

Stack Overflow用户
提问于 2020-03-22 20:45:59
回答 1查看 918关注 0票数 0

英特尔核心的numLogicalProcessors8(2×4物理核)。Linux操作系统。因此,八个OS线程(M)可以并行工作。Go运行时可以在我的Go程序中分配八个上下文(P1P2.P8- runtime.GOMAXPROCS(numLogicalProcessors))。

Go遵循M:N线程模型,其中N是OS线程,M是go程序的Go例程。

操作系统调度程序调度OS线程。线程状态为WAITINGRUNNABLEEXECUTING

去调度器计划去例程。常规状态是WAITINGRUNNABLEEXECUTING。Goroutine是一个用户级线程。

  1. Go程序的运行时是否显式地创建这八个OS线程(M)?在将每个上下文(P)分配给每个OS线程(M)之前?
  2. 如果操作系统调度程序抢占操作系统线程(M1)(由于时间片),那么如何使用P1管理G1的状态?P1是否从OS获得M1状态已更改的通知?
EN

回答 1

Stack Overflow用户

发布于 2020-03-22 21:48:07

  1. 是的,Go调度程序启动执行线程。它们的数量可以用runtime.GOMAXPROCS检查或改变。
  2. 不,操作系统抢占对正在运行的进程是透明的。Go运行时,因为版本1.14可以抢占式围棋例程,但这是为了避免通过紧循环锁定线程。它与操作系统抢占无关。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60804773

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档