浅聊一下golang中的线程

本文探讨了Golang中的线程实现,不同于操作系统层面的线程,Golang使用m结构体在`runtime2.go`中进行管理。重点关注g0、curg和mos,g0负责调度器操作,curg是当前运行的协程(g)的指针,mos则存储着与操作系统线程相关的信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        golang的线程源代码在runtime2.go中的m结构体。注意此处的线程是golang中的线程,不是操作系统中的线程,操作系统的线程由操作系统来调度。

type m struct {
   g0      *g     // goroutine with scheduling stack
   morebuf gobuf  // gobuf arg to morestack
   divmod  uint32 // div/mod denominator for arm - known to liblink
   _       uint32 // align next field to 8 bytes

   // Fields not known to debuggers.
   procid        uint64            // for debuggers, but offset not hard-coded
   gsignal       *g                // signal-handling g
   goSigStack    gsignalStack      // Go-allocated signal handling stack
   sigmask       sigset            // storage for saved signal mask
   tls           [tlsSlots]uintptr // thread-local storage (for x86 extern register)
   mstartfn      func()
   curg          *g       // current running goroutine
   caughtsig     guintptr // goroutine running during fatal signal
   p             puintptr // attached p for executing go code (nil if not executing go code)
   nextp     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值