Обычно будет напечатано 6: две трёхсекундные задержки идут последовательно. Второй worker вызывается лишь после получения результата первого выражения чтения.
Какой результат выведет консоль в примере №15
Обычно будет напечатано 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 отбрасывает дробную часть.