Sobes.tech
Senior

Who and how switches goroutines between each other? Tell about the scheduler (M:G:P).

sobes.tech AI

Answer from AI

In Go, the goroutine scheduler is implemented based on the M:N model (M:G:P), where:

  • G (goroutine) — a lightweight thread of execution.
  • M (machine) — a system thread of the OS on which goroutines run.
  • P (processor) — a logical processor that connects M and G, managing execution.

The scheduler is responsible for switching between goroutines, distributing their execution across available M through P.

How switching occurs:

  • Each M is assigned a P, and M executes goroutines from the P's queue.
  • When a goroutine blocks (e.g., on I/O), the scheduler can switch M to another goroutine to avoid idle time.
  • The scheduler uses cooperative and preemptive switching to efficiently utilize system threads.

Thus, the Go scheduler manages a large number of goroutines on a smaller number of system threads, ensuring high concurrency and low overhead.

Who and how switches goroutines between each other… - sobes.tech