Sobes.tech
Junior — Middle

Ako sa vykonáva rozdeľovanie gorutín na vlákna vykonávania?

sobes.tech AI

Odpoveď od AI

V Go je rozdelenie goroutine na vykonávacie vlákna (OS vlákna) vykonáva pomocou plánovača zabudovaného v runtime. Goroutine je ľahká korutina, ktorá priamo nezodpovedá žiadnemu OS vláknu.

Plánovač Go používa model M:N, kde M je počet OS vlákien a N je počet goroutine. Dynamicky priraďuje goroutine k vláknam, aby efektívne využíval dostupné systémové zdroje.

Hlavné komponenty:

  • G (goroutine) — samotná goroutine.
  • M (stroj) — OS vlákno.
  • P (procesor) — logický procesor, ktorý riadi vykonávanie goroutine.

Proces:

  1. P je priradené goroutine.
  2. P sa spojí s M (OS vláknom).
  3. M vykoná goroutine.

Ak goroutine zablokuje (napríklad pri systémovom volaní), plánovač môže prepnuť vykonávanie na inú goroutine v inom vlákne, aby sa zabránilo nečinnosti.

Týmto spôsobom je rozdelenie goroutine na vlákna automatické a pre vývojára transparentné, zabezpečujúc vysokú konkurencieschopnosť a škálovateľnosť.

Príklad vytvorenia goroutine:

 go func() {
    fmt.Println("Ahoj z goroutine")
}()

Tu sa plánovač sám rozhodne, na ktorom OS vlákne túto goroutine spustiť.