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.