Junior — Middle
როგორ განვახორციელოთ ბრძანებების ერთდროულად შესრულება ერთ პროცესორის ბირთვზე?
sobes.tech AI
პასუხი AI-სგან
Go ენაში, ერთ პროცესორის ბირთვზე რამდენიმე ბრძანების შესრულება ხდება გორუტინების საშუალებით — მსუბუქი ნაკადები, რომლებიც Go-ის გრაფიკმა განაწილება მოახდინა ხელმისაწვდომ სისტემურ ნაკადებზე. მიუხედავად იმისა, რომ მხოლოდ ერთი ბირთვი გაქვთ, გორუტინები კონკურენტულად შესრულდება, ერთმანეთის შორის გადართვით, ქმნიან ერთდროულად შესრულების ეფექტს.
ამისთვის საკმარისია ფუნქციების გაშვება გორუტინებად სიტყვა go-ს გამოყენებით:
package main
import (
"fmt"
"time"
)
func დავალება(სახელი string) {
for i := 0; i < 5; i++ {
fmt.Println(სახელი, "მიმდინარეობს", i)
time.Sleep(100 * time.Millisecond)
}
}
func main() {
go დავალება("Goroutine 1")
go დავალება("Goroutine 2")
// ველით, რომ გორუტინები დასრულდებიან
time.Sleep(1 * time.Second)
}
მიუხედავად ერთი ბირთვის, გრაფიკი გადართავს გორუტინებს, ქმნის ერთდროულად შესრულების ილუზიას. სისტემური ნაკადების რაოდენობის კონტროლისთვის, შეგიძლიათ გამოიყენოთ runtime.GOMAXPROCS(1).
import "runtime"
func main() {
runtime.GOMAXPROCS(1) // შეზღუდვა ერთ ბირთვზე
// გორუტინების გაშვება
}