当前位置: 首页 > article >正文

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)
	}
}

代码说明

  1. worker 函数:
  • 每个 worker 从 numbers 通道中取出一个数字,计算其平方,并将结果发送到 results 通道。
  • 使用 range 从通道中读取数据,直到通道关闭。
  1. 主函数:
  • 创建了两个通道: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 的调度是非确定性的。


http://www.kler.cn/a/557154.html

相关文章:

  • 【Postgresql】Linux 部署 Postgresql 数据库 (图文教程)
  • 直角三角堰计算公式
  • 开发指南103-jpa的find**/get**全解
  • 数据结构:队列queue和栈stack
  • UE5中按钮圆角,设置边框
  • CSDN如何设置付费专栏
  • [ TypeScript ] “undefined extends xxx“ 总是为 true 的 bug
  • 深入解析C++函数指针与指针函数:从原理到实战
  • bind()的概念和使用案例
  • USC安防平台之视频切片
  • 驱动的三个框架
  • 52类110个主流Java组件和框架
  • IEEE官方期刊缩写查询pdf分享
  • 蓝桥杯每日一题--第一周(包含五题)
  • EP零散笔记
  • 神经网络防“失忆“秘籍:弹性权重固化如何让AI学会“温故知新“
  • 泥沙输送的DEM-CFD耦合案例
  • Kubernetes控制平面组件:APIServer 基于 Webhook Toeken令牌 的认证机制详解
  • 广度优先搜索详解--BFS--蒟蒻的学习之路
  • 沃丰科技大模型标杆案例|周大福集团统一大模型智能服务中心建设实践