Sobes.tech
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) // შეზღუდვა ერთ ბირთვზე
    // გორუტინების გაშვება
}