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)
}
}
В этом примере создаётся пул из трёх воркеров, которые параллельно обрабатывают числа, вычисляя их квадраты. Каналы используются для передачи заданий и получения результатов.