Sobes.tech
Back to questions
Middle
4

//1-10 вывести квадраты, посчитать в нескольких потоках, worker pool

Companies where asked
Магнум

Answer from AI

sobes.tech AI

Ниже пример на Go, который вычисляет квадраты чисел от 1 до 10 с использованием пула воркеров (worker pool) и нескольких горутин:

type Job struct {
    Number int
}

type Result struct {
    Number int
    Square int
}

func worker(jobs <-chan Job, results chan<- Result, wg *sync.WaitGroup) {
    defer wg.Done()
    for job := range jobs {
        results <- Result{Number: job.Number, Square: job.Number * job.Number}
    }
}

func main() {
    jobs := make(chan Job, 10)
    results := make(chan Result, 10)

    var wg sync.WaitGroup
    workerCount := 3 // количество воркеров

    for i := 0; i < workerCount; i++ {
        wg.Add(1)
        go worker(jobs, results, &wg)
    }

    // Отправляем задания
    for i := 1; i <= 10; i++ {
        jobs <- Job{Number: i}
    }
    close(jobs)

    // Закрываем канал результатов после завершения всех воркеров
    go func() {
        wg.Wait()
        close(results)
    }()

    // Читаем результаты
    for result := range results {
        fmt.Printf("%d^2 = %d\n", result.Number, result.Square)
    }
}

В этом примере создаётся пул из трёх воркеров, которые параллельно обрабатывают числа, вычисляя их квадраты. Каналы используются для передачи заданий и получения результатов.