Junior — Middle
Go тилинде атаандаштык, асинхрондук жана параллелдик кандай ишке ашырылат?
sobes.tech AI
AIден жооп
Go тилинде атаандаштык, асинхрондук жана параллелдик goroutine жана каналдар аркылуу ишке ашырылат.
- Goroutine'ler — бул жеңил жиптер, алар
goачкыч сөзү менен ишке киргизилет. Алар функцияларды асинхрондуу иштетүүгө жана ресурстар үчүн атаандашууга мүмкүндүк берет. - Каналдар — goroutine'лер арасында коопсуз маалымат алмашуу үчүн колдонулат, синхрондоштуруу жана билдирүүлөрдү өткөрүү камсыз кылынат.
Параллелдик бир нече goroutine'лерди ишке киргизүү менен жетишилет, алар бир мезгилде бир нече процессор ядролорунда иштей алат, эгер GOMAXPROCS белгиленсе.
Мисал:
package main
import (
"fmt"
"time"
)
func worker(id int, ch chan string) {
time.Sleep(time.Second)
ch <- fmt.Sprintf("Жумушчу %d аяктады", id)
}
func main() {
ch := make(chan string)
for i := 1; i <= 3; i++ {
go worker(i, ch) // goroutine ишке киргизүү
}
for i := 1; i <= 3; i++ {
msg := <-ch // канал аркылуу натыйжаны алуу
fmt.Println(msg)
}
}
Ошентип, Go конкуренция жана параллелизм менен иштөө үчүн жөнөкөй жана эффективдүү каражаттарды сунуштайт.