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

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 的调度是非确定性的。

相关文章:

  • 【Linux】Linux 文件系统——有关 inode 不足的案例
  • Golang实现简单的接口去重函数
  • Http升级为Https - 开发/测试服环境
  • MATLAB基础学习相关知识
  • 【Java】多线程和高并发编程(四):阻塞队列(上)基础概念、ArrayBlockingQueue
  • 深入理解IP地址与端口:网络通信的基石
  • 现代游戏UI架构深度解析——以UIController为核心的模块化界面管理系统
  • 华大MCU HC32F005端口GPIO控制失效问题
  • 在原有基础上的Python正则表达式终极指南,新增高级用法、复杂案例和底层原理分析
  • DApp 开发入门指南
  • 车载诊断数据库 --- 通用性诊断数据库ODX
  • ubuntu22.04桥接模式开代理
  • 改BUG:Mock测试的时候,when失效
  • 面试题之箭头函数和普通函数有什么区别?
  • 【AI】GitHub Copilot
  • 从【人工智能】到【计算机视觉】,【深度学习】引领的未来科技创新与变革
  • VScode 使用Deepseek又方便又好用的另一款插件
  • 掌握.NET Core后端发布流程,如何部署后端应用?
  • 【LeetCode】力扣刷题攻略路线推荐!适合新手小白入门~(含各类题目序号)
  • 2025年2月深度实测!DeepSeek、OpenAI o1、Gemini打造爆款应用及对比
  • 城桥微信网站设计制作/2023免费推广入口
  • 微网站 微信/google seo 优化招聘
  • 越城区住房和城乡建设局网站/营销策划公司简介
  • 南通网站建设教程/网站建站系统
  • 建行个人网上银行登录入口官网/东莞网站seo技术
  • 小说网站做编辑器/seo搜索是什么意思