go 스케줄링
goroutine
고루틴은 고런타임의 가상 환경에서 존재한다. 고루틴의 생명주기 관리를 위해 고 런타임 스케줄러가 필요로 한다.
고 런타임은 3개의 C 구조체를 유지한다.
- G 구조체: 단일 고루틴을 의미. 스택 포인터, 베이스 스택, 스택 ID, 캐시, 상태 보유
- M 구조체: OS 스레드. 러너블 고루틴 큐에 대한 포인터 보유, 실행중인 고루틴과 스케줄러에 대한 포인터 보유
- Sched 구조체: 대기, 사융중이지 않은 고루틴에 대한 큐를 보유