Junior — Middle
როგორ არის განხორციელებული კონკურენციის მოდელი Golang-ის ენაში?
sobes.tech AI
პასუხი AI-სგან
Go ენაში კონკურენციის მოდელი დაფუძნებულია goroutines და არხებზე.
-
Goroutines — ეს მსუბუქი ნაკადებია, რომლებიც იწყება
goსაკვანძო სიტყვით. ისინი საშუალებას აძლევენ ფუნქციებს პარალელურად შესრულებას, რესურსების მნიშვნელოვანი ხარჯის გარეშე. -
არხები — ეს ტიპიზებული არხებია, რომლებიც გამოიყენება მონაცემთა გაცვლისთვის goroutines-ებს შორის, უზრუნველყოფენ სინქრონიზაციას და უსაფრთხო ინფორმაციის გაცვლას.
მაგალითი:
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)
}
for i := 1; i <= 3; i++ {
msg := <-ch
fmt.Println(msg)
}
}
ამ მაგალითში, სამი goroutine მუშაობს პარალელურად და აგზავნის შედეგს არხზე, რომლისგანაც მთავარი ნაკადი კითხულობს.
ამ გზით, Go-ს ადვილად ხდება კონკურენტული პროგრამირება, მალავს ნაკადების და სინქრონიზაციის სირთულეებს.