主页 > 开源代码  > 

Golang通过并发计算平方示例演示并发

Golang通过并发计算平方示例演示并发
示例

以下代码演示了如何使用 Goroutines 并发计算一组数字的平方,并通过通道收集结果。

package main import ( "fmt" "time" ) // worker 函数,用于计算一个数字的平方,并将结果发送到通道 func worker(id int, numbers <-chan int, results chan<- int) { for number := range numbers { fmt.Printf("Worker %d is processing number %d\n", id, number) time.Sleep(time.Second) // 模拟一些耗时操作 results <- number * number } } func main() { // 创建两个通道:一个用于传递任务,另一个用于接收结果 numbers := make(chan int, 10) results := make(chan int, 10) // 启动 3 个 worker goroutines for i := 1; i <= 3; i++ { go worker(i, numbers, results) } // 向 numbers 通道发送任务 for i := 1; i <= 10; i++ { numbers <- i } close(numbers) // 关闭 numbers 通道,表示不再发送任务 // 从 results 通道接收结果 for i := 1; i <= 10; i++ { result := <-results fmt.Printf("Result: %d\n", result) } } 代码说明 worker 函数: 每个 worker 从 numbers 通道中取出一个数字,计算其平方,并将结果发送到 results 通道。使用 range 从通道中读取数据,直到通道关闭。 主函数: 创建了两个通道:numbers 用于存放待处理的任务,results 用于存放计算结果。启动了 3 个 Goroutines,每个 Goroutine 都运行 worker 函数。将 1 到 10 的数字发送到 numbers 通道,随后关闭通道。最后,从 results 通道中读取并打印所有计算结果。 3、 并发执行:由于同时启动了 3 个 Goroutines,多个任务会被并发处理,从而提高处理效率。 输出示例

运行程序后,你会看到类似以下的输出:

Worker 1 is processing number 1 Worker 2 is processing number 2 Worker 3 is processing number 3 Worker 1 is processing number 4 Worker 2 is processing number 5 Worker 3 is processing number 6 Result: 1 Result: 4 Result: 9 Result: 16 Result: 25 Result: 36 ...

每次运行程序时,任务的分配可能会有所不同,因为 Goroutines 的调度是非确定性的。

标签:

Golang通过并发计算平方示例演示并发由讯客互联开源代码栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“Golang通过并发计算平方示例演示并发