Go m struct


M은 Machine, OS의 스레드
표준 POSIX 스레드를 따른다
```typetype m struct {	g0      *g     // goroutine with scheduling stack	morebuf gobuf  // gobuf arg to morestack	divmod  uint32 // div/mod denominator for arm - known to liblink	// Fields not known to debuggers.	procid        uint64     // for debuggers, but offset not hard-coded	gsignal       *g         // signal-handling g	sigmask       sigset     // storage for saved signal mask	tls           [6]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         puintptr	id            int32	mallocing     int32	throwing      int32	preemptoff    string // if != "", keep curg running on this m	locks         int32	softfloat     int32	dying         int32	profilehz     int32	helpgc        int32	spinning      bool // m is out of work and is actively looking for work	blocked       bool // m is blocked on a note	inwb          bool // m is executing a write barrier	newSigstack   bool // minit on C thread called sigaltstack	printlock     int8	incgo         bool // m is executing a cgo call	fastrand      uint32	ncgocall      uint64      // number of cgo calls in total	ncgo          int32       // number of cgo calls currently in progress	cgoCallersUse uint32      // if non-zero, cgoCallers in use temporarily	cgoCallers    *cgoCallers // cgo traceback if crashing in cgo call	park          note	alllink       *m // on allm	schedlink     muintptr	mcache        *mcache	lockedg       *g	createstack   [32]uintptr // stack that created this thread.	freglo        [16]uint32  // d[i] lsb and f[i]	freghi        [16]uint32  // d[i] msb and f[i+16]	fflag         uint32      // floating point compare flags	locked        uint32      // tracking for lockosthread	nextwaitm     uintptr     // next m waiting for lock	needextram    bool	traceback     uint8	waitunlockf   unsafe.Pointer // todo go func(*g, unsafe.pointer) bool	waitlock      unsafe.Pointer	waittraceev   byte	waittraceskip int	startingtrace bool	syscalltick   uint32	thread        uintptr // thread handle	// these are here because they are too large to be on the stack	// of low-level NOSPLIT functions.	libcall   libcall	libcallpc uintptr // for cpu profiler	libcallsp uintptr	libcallg  guintptr	syscall   libcall // stores syscall parameters on windows	mOS}```