MST

星途 面试题库

面试题:Go中Goroutine与通道如何协作实现简单任务分发

假设有一个任务列表,每个任务是对一个整数进行平方运算。请使用Goroutine和通道来实现将这些任务分发给多个Goroutine并行处理,并最终收集结果。描述你的实现思路并给出核心代码片段。
33.8万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试

实现思路

  1. 创建一个任务通道,用于发送需要平方运算的整数。
  2. 创建多个Goroutine,每个Goroutine从任务通道中接收任务并进行平方运算,将结果发送到结果通道。
  3. 创建一个结果通道,用于接收各个Goroutine计算出的平方结果。
  4. 主Goroutine向任务通道发送所有任务,然后从结果通道收集所有结果。

核心代码片段

package main

import (
    "fmt"
)

func worker(tasks <-chan int, results chan<- int) {
    for num := range tasks {
        results <- num * num
    }
    close(results)
}

func main() {
    tasks := make(chan int)
    results := make(chan int)

    numWorkers := 3
    for i := 0; i < numWorkers; i++ {
        go worker(tasks, results)
    }

    numbers := []int{1, 2, 3, 4, 5}
    for _, num := range numbers {
        tasks <- num
    }
    close(tasks)

    finalResults := []int{}
    for i := 0; i < len(numbers); i++ {
        finalResults = append(finalResults, <-results)
    }
    close(results)

    fmt.Println(finalResults)
}