Пакетный конкурентный вывод чисел

Параллельными должны быть подготовка пяти результатов, а печать — последовательной. Неизменённая displayNumber не гарантирует порядок при конкурентных вызовах.

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

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

Параллельными должны быть подготовка пяти результатов, а печать — последовательной. Неизменённая displayNumber не гарантирует порядок при конкурентных вызовах.

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

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

Условие

Необходимо реализовать конкурентный вывод чисел от 1 до 10, по пять штук одновременно, при этом сохранять порядок их печати. Следующая партия из пяти чисел должна запускаться только после полного завершения предыдущей.

package main

import (
    "fmt"
    "time"
)

func main() {
    // реализуйте логику запуска печати чисел пакетами
}

func displayNumber(value int) {
    time.Sleep(time.Second)
    fmt.Println(value)
}

Ответ

Параллельными должны быть подготовка пяти результатов, а печать — последовательной. Неизменённая displayNumber не гарантирует порядок при конкурентных вызовах.

Разделим ожидание и вывод: каждая партия запускает пять независимых подготовок, main получает результаты по индексам, а следующая партия начинается после завершения текущей.

package main

import (
    "fmt"
    "time"
)

func main() {
    for start := 1; start <= 10; start += 5 {
        ready := make([]chan int, 5)
        for i := 0; i < 5; i++ {
            ready[i] = make(chan int, 1)
            go func(value int, out chan<- int) {
                time.Sleep(time.Second)
                out <- value
            }(start+i, ready[i])
        }
        for _, out := range ready {
            fmt.Println(<-out)
        }
    }
}

Вывод строго 1–10, подготовка занимает примерно две секундные волны без гарантии точного времени. Если запрещено менять displayNumber, для порядка придётся сериализовать её вызовы, и ожидания внутри уже не выполнятся параллельно.

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

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

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

Подробнее