Какой результат выведет консоль в примере №15

Обычно будет напечатано 6: две трёхсекундные задержки идут последовательно. Второй worker вызывается лишь после получения результата первого выражения чтения.

Короткий ответ

Что ответить на собеседовании

Обычно будет напечатано 6: две трёхсекундные задержки идут последовательно. Второй worker вызывается лишь после получения результата первого выражения чтения.

Подробный разбор

Ответ с пояснениями

Условие

Определите, что будет напечатано в консоль после запуска следующей программы.

func main() {
    timeStart := time.Now()
    _, _ = <-worker(), <-worker()
    println(int(time.Since(timeStart).Seconds()))
            
}

func worker() chan int {
    ch := make(chan int)
    go func() {
        time.Sleep(3 * time.Second)
        ch <- 1        
    }()
    return ch        
            
}

Ответ

Обычно будет напечатано 6: две трёхсекундные задержки идут последовательно. Второй worker вызывается лишь после получения результата первого выражения чтения.

Вычисление <-worker(), <-worker() не запускает оба worker заранее. Для параллельного варианта сначала выполните first, second := worker(), worker(), потом прочитайте каналы; тогда ожидание обычно около трёх секунд. Точное число секунд зависит от планирования, а int отбрасывает дробную часть.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее