Sobes.tech
Junior — Middle

Кадом сохтори асосӣ барои идоракунӣ ва иҷрои горутинҳо дар забони барномасозӣ истифода мешаванд?

sobes.tech AI

Ҷавоб аз AI

Барои идора ва иҷрои goroutine дар Go, структураҳои асосии зерин истифода мешаванд:

  • Идоракунии goroutine: калимаи go пеш аз фармони функсия онро дар goroutine ҷудогона оғоз мекунад, масалан:

    go функсияиМан()
    

    Ин имкон медиҳад, ки функсия ба таври асинхронӣ иҷро шавад.

  • Каналу (channels): барои ҳамоҳангсозӣ ва мубодилаи маълумот байни goroutine-ҳо истифода мешаванд. Канал чунин сохта мешавад:

    ch := make(chan int)
    

    Иҷро ва қабул кардани маълумот:

    ch <- 42      // ирсол
    val := <-ch   // қабул
    

    Каналҳо муоширати бехатарро таъмин мекунанд ва goroutine-ро мепиндоранд, агар маълумотҳо тайёр набошанд.

  • sync.WaitGroup: барои интизор шудан ба анҷоми гурӯҳи goroutine-ҳо истифода мешавад. Масалан:

    var wg sync.WaitGroup
    wg.Add(1)
    go func() {
        defer wg.Done()
        // кори goroutine
    }()
    wg.Wait() // интизор шудан барои анҷоми ҳамаи goroutine-ҳо
    
  • select: имкон медиҳад, ки як вақт чанд амалиёт дар каналҳо интизор шаванд ва онеро интихоб кунанд, ки тайёр аст. Масалан:

    select {
    case msg := <-ch1:
        fmt.Println("Пас аз ch1:", msg)
    case ch2 <- 42:
        fmt.Println("Ирсол ба ch2")
    default:
        fmt.Println("Ҳеҷ амалиёт тайёр нест")
    }
    

Ин структураҳо имкон медиҳанд, ки иҷрои параллелӣ самаранок оғоз ёбад, ҳамоҳангсозӣ шавад ва идора карда шавад.