Sobes.tech
Junior — Middle

W jaki sposób odbywa się rozdział goroutines na wątki wykonawcze?

sobes.tech AI

Odpowiedź od AI

W Go, rozdział goroutines na wątki wykonawcze (wątki OS) odbywa się za pomocą planisty wbudowanego w środowisko uruchomieniowe. Goroutine to lekkie korutyny, które nie odpowiadają bezpośrednio pojedynczemu wątkowi OS.

Planista Go używa modelu M:N, gdzie M to liczba wątków OS, a N to liczba goroutines. Dynamicznie przypisuje goroutines do wątków, aby efektywnie wykorzystywać dostępne zasoby systemowe.

Główne komponenty:

  • G (goroutine) — sama goroutine.
  • M (maszyna) — wątek OS.
  • P (procesor) — logiczny procesor zarządzający wykonywaniem goroutines.

Proces:

  1. Do goroutine przypisywany jest P.
  2. P łączy się z M (wątkiem OS).
  3. M wykonuje goroutine.

Jeśli goroutine zostanie zablokowana (np. podczas wywołania systemowego), planista może przełączyć wykonanie na inną goroutine w innym wątku, aby uniknąć bezczynności.

W ten sposób rozdział goroutines na wątki odbywa się automatycznie i jest przezroczysty dla programisty, zapewniając wysoką konkurencyjność i skalowalność.

Przykład tworzenia goroutine:

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

Tutaj planista sam zdecyduje, na którym wątku OS wykona tę goroutine.