Sobes.tech
Junior — Middle

Чӣ гуна рақобат, асинхронӣ ва параллелизм дар забони Go амалӣ карда мешаванд?

sobes.tech AI

Ҷавоб аз AI

Дар Го, рақобат, асинхронӣ ва параллелизм тавассути горутинҳо ва каналҳо амалӣ карда мешаванд.

  • Горутинҳо — ин равандҳои сабук ҳастанд, ки бо калидвожа go оғоз мешаванд. Онҳо имкон медиҳанд, ки функсияҳо асинхронӣ иҷро шаванд ва барои захираҳо рақобат кунанд.
  • Каналҳо барои мубодилаи бехатари маълумот байни горутинҳо истифода мешаванд, ҳамзамон синхронӣ ва интиқоли паёмҳоро таъмин мекунанд.

Параллелизм бо оғоз кардани чанд горутин, ки метавонанд ҳамзамон дар чанд ядрои процессор иҷро шаванд, ба даст меояд, агар 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) // оғоз кардани горутин
    }
    for i := 1; i <= 3; i++ {
        msg := <-ch // гирифтани натиҷа аз канал
        fmt.Println(msg)
    }
}

Тавре ки мебинем, Го воситаҳои содда ва муассир барои кор бо рақобат ва параллелизмро пешниҳод мекунад.