Sobes.tech
Junior — Middle

Golang-da icra iplərinin işi və sinxronizasiyası necə təmin edilir?

sobes.tech Süni İntellekt

AI-dan cavab

Go dilində iş axınları ilə işləmək üçün goroutinlər (goroutines) istifadə olunur — bunlar Go-nun vaxtında idarə olunan yüngül axınlardır. Goroutinlər go açar sözü ilə funksiyanı çağırmadan əvvəl işə salınır, bu da onları asinxron şəkildə icra etməyə imkan verir.

Goroutinləri sinxronlaşdırmaq üçün kanallar (channels) və sync paketindən primitivlər (məsələn, Mutex, WaitGroup) istifadə olunur. Kanallar goroutinlər arasında təhlükəsiz məlumat mübadiləsini təmin edir və onları sinxronlaşdırmağa imkan verir.

Goroutinlər və kanal istifadəsinin nümunəsi:

package main

import (
    "fmt"
    "time"
)

func worker(ch chan string) {
    time.Sleep(time.Second)
    ch <- "hazır"
}

func main() {
    ch := make(chan string)
    go worker(ch)
    msg := <-ch
    fmt.Println("Goroutin işi:", msg)
}

Burada, əsas goroutine worker funksiyasını ayrı bir goroutine-də işə salır, o gecikmədən sonra mesajı kanala göndərir. Əsas goroutine mesajı almağı gözləyir, bu da sinxronizasiyanı təmin edir.