Sobes.tech
Middle

Kas ir izpildlaiks (runtime) un kā darbojas plānotājs (scheduler)?

sobes.tech AI

Atbilde no AI

Go izpildes laiks (runtime) ir apkārtne, kurā tiek izpildītas Go programmas. Tā ietver:

  • Atmiņas pārvaldība: Garbage collector (atkritumu savācējs) automātiski pārvalda atmiņas sadali un atbrīvošanu.
  • Plānotājs (scheduler): Pārvalda gorutīnu izpildi operētājsistēmas pavedienos.
  • Sistēmas izsaukumi: Nodrošina saskarni ar operētājsistēmu sadarbībai.
  • Sinhronizācijas primitīvi: Kanāli, mutexi un citi mehānismi gorutīnu koordinācijai.

Go plānotājs īsteno M:N modeli (dažas gorutīnas vienlaikus darbojas vairākos OS pavedienos). Tā galvenie komponenti:

  • G (Goroutine): Viegls izpildes pavedienis, būtībā funkcijas abstrakcija.
  • M (Machine): Operētājsistēmas pavedienis, kurā darbojas Go programmas.
  • P (Processor): Loģisks procesors, kas ir saistīts ar OS pavedienu. Tas glabā vietējo runnable rindu gorutīnām.

Plānotāja darba princips:

  1. Gorutīnas (G) tiek izveidotas un pievienotas globālajai vai vietējai runnable rindai.
  2. OS pavedieni (M) ir saistīti ar loģiskajiem P. P skaits parasti ir vienāds ar CPU kodolu skaitu (GOMAXPROCS).
  3. P ņem gorutinu no sava vietējā rindas. Ja vietējā rinda ir tukša, P mēģina "zagt" (steal) gorutinas no citas P rinda vai no globālās rindas.
  4. M izpilda gorutinu.
  5. Kad gorutina bloķējas (piemēram, lasa no kanāla bez datiem vai veic sistēmas izsaukumu), M atvienojas no P, un P kļūst pieejams citai gorutīnai. Bloķētā gorutina tiek novietota gaidīšanas režīmā. Kad bloķēšana tiek novērsta, gorutina atkal kļūst par runnable un tiek ievietota rindā.
  6. Ja M bloķējas sistēmas izsaukuma laikā, tas neuztur P. Var tikt izveidots jauns M vai izmantots esošais, lai P varētu turpināt ar citām gorutīnām.

Šī pieeja ļauj efektīvi izmantot procesora resursus un viegli mērogot paralēlas uzdevumus, slēpjot OS pavedienu pārvaldības sarežģītību no izstrādātāja.

// Gorutīnas izveides piemērs
func myFunc() {
	// Gorutīnas kods
}

func main() {
	go myFunc() // Gorutīnas palaišana
	// Galvenā programma turpina darbību paralēli
}