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

news/2025/2/21 17:42:52/

示例

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

package mainimport ("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 goroutinesfor 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 := <-resultsfmt.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.ppmy.cn/news/1573944.html

相关文章

如何利用AI制作PPT,轻松实现高效演示

如何利用AI制作PPT&#xff0c;轻松实现高效演示&#xff01;在这个信息爆炸的时代&#xff0c;PPT已经成为了日常工作和学习中不可或缺的工具。每当我们需要汇报、展示或总结时&#xff0c;PPT几乎成了“必杀技”。然而制作一份精彩的PPT往往需要花费大量的时间和精力。随着人…

网络安全专业好就业吗?

网络安全是一个涉及领域非常广泛的行业&#xff0c;几乎涵盖了所有行业。无论是金融、医疗、互联网&#xff0c;还是教育、政府机构等&#xff0c;都需要网络安全人才来保障其安全运行&#xff0c;因此也得到了个人及企业的高度重视。那么网络安全专业好就业吗?我们一起来看看…

Linux发展史:从个人项目到开源帝国的技术演进

一、起源与诞生&#xff08;1960s-1991&#xff09; UNIX的奠基 Linux的基因可追溯至1969年贝尔实验室的Ken Thompson与Dennis Ritchie。为运行《星际旅行》游戏&#xff0c;Thompson用BCPL语言开发了UNIX原型&#xff0c;后由Ritchie以C语言重构&#xff0c;成为首个可移植操作…

调用DeepSeek API接口:实现智能数据挖掘与分析

调用DeepSeek API接口:实现智能数据挖掘与分析 在当今数据驱动的时代,企业和开发者越来越依赖高效的数据挖掘与分析工具来获取有价值的洞察。DeepSeek作为一款先进的智能数据挖掘平台,提供了强大的API接口,帮助用户轻松集成其功能到自己的应用中。本文将详细介绍如何调用D…

网站改了域名,如何查找?

一个你常访问的网站突然改了域名&#xff0c;你却不知道新地址是什么&#xff1f;域名一旦更换&#xff0c;很多用户可能会感到迷茫。不过&#xff0c;别担心&#xff0c;查找更改后的域名其实有一些简单的方法&#xff0c;今天就来聊聊如何找到那些失踪的网站。 最直接的方法…

使用 Spark NLP 实现中文实体抽取与关系提取

在自然语言处理(NLP)领域,实体抽取和关系提取是两个重要的任务。实体抽取用于从文本中识别出具有特定意义的实体(如人名、地名、组织名等),而关系提取则用于识别实体之间的关系。本文将通过一个基于 Apache Spark 和 Spark NLP 的示例,展示如何实现中文文本的实体抽取和…

软考高级《系统架构设计师》知识点(七)

系统配置与性能评价 性能指标 性能指标&#xff1a;是软、硬件、的性能指标的集成。在硬件中&#xff0c;包括计算机、各种通信交换设备、各类网络设备等&#xff1b;在软件中&#xff0c;包括&#xff1a;操作系统、协议以及应用程序等。 对计算机评价的主要性能指标有&#x…

matlab二维艾里光束,阵列艾里光束,可改变光束直径以及距离

matlab二维艾里光束&#xff0c;阵列艾里光束&#xff0c;可改变光束直径以及距离 资源文件列表 airy/Airy_erwei.m , 600 airy/license_server.lic , 21870 airy/x_w0.m , 142