go 스케줄링

go 스케줄링

goroutine

고루틴은 고런타임의 가상 환경에서 존재한다. 고루틴의 생명주기 관리를 위해 고 런타임 스케줄러가 필요로 한다.

고 런타임은 3개의 C 구조체를 유지한다.

  1. G 구조체: 단일 고루틴을 의미. 스택 포인터, 베이스 스택, 스택 ID, 캐시, 상태 보유
  2. M 구조체: OS 스레드. 러너블 고루틴 큐에 대한 포인터 보유, 실행중인 고루틴과 스케줄러에 대한 포인터 보유
  3. Sched 구조체: 대기, 사융중이지 않은 고루틴에 대한 큐를 보유