前言
Goroutine 是 Go 语言的并发执行单元,是Go语言并发的基础。本文将从源码的角度,解读Goroutine的创建、销毁、状态转移等过程。
协程数据结构
type g struct { stack stack stackguard0 uintptr stackguard1 uintptr
_panic *_panic _defer *_defer m *m sched gobuf syscallsp uintptr syscallpc uintptr syscallbp uintptr stktopsp uintptr param unsafe.Pointer atomicstatus atomic.Uint32 stackLock uint32 goid uint64 schedlink guintptr waitsince int64 waitreason waitReason
preempt bool preemptStop bool preemptShrink bool
asyncSafePoint bool
paniconfault bool gcscandone bool throwsplit bool activeStackChans bool parkingOnChan atomic.Bool inMarkAssist bool coroexit bool
raceignore int8 nocgocallback bool tracking bool trackingSeq uint8 trackingStamp int64 runnableTime int64 lockedm muintptr sig uint32 writebuf []byte sigcode0 uintptr sigcode1 uintptr sigpc uintptr parentGoid uint64 gopc uintptr ancestors *[]ancestorInfo startpc uintptr racectx uintptr waiting *sudog cgoCtxt []uintptr labels unsafe.Pointer timer *timer sleepWhen int64 selectDone atomic.Uint32
goroutineProfiled goroutineProfileStateHolder
coroarg *coro
trace gTraceState
gcAssistBytes int64 }
|
协程的创建