Sobes.tech
Junior — Middle

Тавзеҳ диҳед принсипи кории механизми ҳамоҳангсозии goroutineҳо дар контексти иҷрои рақобатии вазифаҳо.

sobes.tech AI

Ҷавоб аз AI

В Go, горутиндар — бұл жеңіл салмақты ағындар, олар бір уақытта орындалады. Горутиндарды синхрондау үшін, ортақ ресурстарға қол жеткізуді үйлестіруге және орындалуын реттеуге мүмкіндік беретін механизмдер пайдаланылады.

Негізгі синхрондау механизмдері:

  • Каналдар (channels): горутиндар арасында деректерді тасымалдауға мүмкіндік береді және хабарламалар алмасу арқылы синхрондауды қамтамасыз етеді.
  • Mutex (sync.Mutex): ортақ деректерге қол жеткізуді бұғаттайды, жарыс жағдайларын болдырмау үшін.
  • WaitGroup (sync.WaitGroup): бір топ горутиндардың аяқталуын күтуді қамтамасыз етеді.

Каналмен мысал:

package main

import (
    "fmt"
)

func worker(ch chan int) {
    val := <-ch // каналдан деректерді күтеді
    fmt.Println("Қабылданған мән:", val)
}

func main() {
    ch := make(chan int)
    go worker(ch)
    ch <- 42 // каналға деректер жібереді
}

Мұнда канал синхрондауды қамтамасыз етеді: worker горутины, main мән жібергенше күтеді.