Sobes.tech
Junior — Middle

Go tilida raqobat, asinxronlik va parallelizm qanday amalga oshiriladi?

sobes.tech AI

AIdan javob

Go tilida raqobat, asinxronlik va parallelizm gorutinalar va kanallar yordamida amalga oshiriladi.

  • Gorutinalar — bu go kalit so'zi bilan boshlanadigan yengil oqimlar. Ular asinxron ravishda funksiyalarni bajarishga va resurslar uchun raqobatlashishga imkon beradi.
  • Kanallar — gorutinalar o'rtasida xavfsiz ma'lumot almashinuvi uchun ishlatiladi, sinxronizatsiya va xabarlarni uzatishni ta'minlaydi.

Parallelizm bir nechta gorutinalarni ishga tushirish orqali erishiladi, ular bir vaqtning o'zida bir nechta protsessor yadroida ishlashi mumkin, agar GOMAXPROCS o'rnatilgan bo'lsa.

Misol:

package main
import (
    "fmt"
    "time"
)

func worker(id int, ch chan string) {
    time.Sleep(time.Second)
    ch <- fmt.Sprintf("Ishchi %d tugadi", id)
}

func main() {
    ch := make(chan string)
    for i := 1; i <= 3; i++ {
        go worker(i, ch) // gorutina ishga tushiriladi
    }
    for i := 1; i <= 3; i++ {
        msg := <-ch // kanal orqali natija olinadi
        fmt.Println(msg)
    }
}

Shu tarzda, Go raqobat va parallelizm bilan ishlash uchun oddiy va samarali vositalarni taqdim etadi.