Sobes.tech
Junior — Middle

Golangda bajarish iplarining ishlash va sinxronizatsiyasi qanday ta'minlanadi?

sobes.tech AI

AIdan javob

Go tilida bajarish oqimlari bilan ishlash uchun goroutinlar (goroutines) ishlatiladi — bu Go tomonidan boshqariladigan yengil oqimlar. Goroutinlar go kalit so'zi yordamida funksiyani chaqirishdan oldin ishga tushiriladi, bu uni asinxron bajarishga imkon beradi.

Goroutinlarni sinxronlashtirish uchun kanallar (channels) va sync paketidan primitivlar (masalan, Mutex, WaitGroup) qo'llaniladi. Kanallar goroutinlar o'rtasida xavfsiz ma'lumot almashishni ta'minlaydi va ularni sinxronlashtirish imkonini beradi.

Goroutinlar va kanal ishlatish misoli:

package main

import (
    "fmt"
    "time"
)

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

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

Bu yerda, asosiy goroutine worker funksiyasini alohida goroutine sifatida ishga tushiradi, u kechikishdan so'ng xabarni kanal orqali yuboradi. Asosiy goroutine xabarni kanal orqali qabul qilishni kutadi, bu esa sinxronizatsiyani ta'minlaydi.