Golang 并发之 Goroutine

embedded/2025/1/15 6:39:38/

Goroutine 是 Go 编程语言中的一个重要概念。它是 Go 语言实现并发的基础,可以简单地理解为 Go 语言中的轻量级线程

具体来说,Goroutine 有以下特点:

1.轻量级:

Goroutine 的创建和切换都非常快速,只需要几微秒。这与操作系统级别的线程相比要快得多。

2.并发性:

Goroutine 可以并发执行,意味着可以同时执行多个 Goroutine。Go 运行时会自动管理 Goroutine 的调度和执行。

3.独立性:

每个 Goroutine 都有自己的栈空间、程序计数器和其他必要的运行时数据结构。Goroutine 之间是相互独立的。

4.易用性:

创建 Goroutine 非常简单,只需要使用 go 关键字就可以了。

package mainimport ("fmt""sync""time"
)func main() {// 示例 1:并发性fmt.Println("示例 1: 并发性")var wg sync.WaitGroupwg.Add(2)// 启动两个 Goroutine 并发执行go func() {defer wg.Done()performTask("Goroutine 1")}()go func() {defer wg.Done()performTask("Goroutine 2")}()// 等待两个 Goroutine 执行完毕wg.Wait()fmt.Println("示例 1 完成")// 示例 2:独立性fmt.Println("\n示例 2: 独立性")var data int = 0go func() {data++fmt.Println("Goroutine 1 修改 data 为:", data)}()go func() {data--fmt.Println("Goroutine 2 修改 data 为:", data)}()// 给 Goroutine 一些时间执行time.Sleep(1 * time.Second)fmt.Println("main 函数中 data 的值:", data)// 示例 3:创建 Goroutinefmt.Println("\n示例 3: 创建 Goroutine")go func() {fmt.Println("这是一个新的 Goroutine")}()fmt.Println("这是 main 函数中的代码")time.Sleep(1 * time.Second)
}// 模拟一个耗时的任务
func performTask(name string) {fmt.Printf("开始执行 %s 任务\n", name)time.Sleep(2 * time.Second)fmt.Printf("%s 任务执行完毕\n", name)
}


http://www.ppmy.cn/embedded/154044.html

相关文章

工业视觉2-相机选型

工业视觉2-相机选型 一、按芯片类型二、按传感器结构特征三、按扫描方式四、按分辨率大小五、按输出信号六、按输出色彩接口类型 这张图片对工业相机的分类方式进行了总结,具体如下: 一、按芯片类型 CCD相机:采用电荷耦合器件(CC…

【深度学习】PyTorch:手写数字识别

在这个技术博客中,我们将一起探索如何使用PyTorch来实现一个手写数字识别系统。这个系统将基于经典的MNIST数据集,这是一个包含60,000个训练样本和10,000个测试样本的手写数字(0-9)数据库。通过这个项目,你将了解如何使用PyTorch进行深度学习模型的构建、训练和评估。 文…

问题记录-Linux 下.sh脚本中变量不识别-2025-1-14

源文件: CROSS_COMPILE=/opt/cross_chain/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu- CC = $(CROSS_COMPILE)g++ 运行 ./auto.sh: line 4: CROSS_COMPILE: command not found ./auto.sh: line 4: CC: command not found 分析: 在 sh 脚本中…

Linux 高级路由 —— 筑梦之路

Linux 高级路由详解 本文将基于您提供的 Linux 高级路由极简教程 文章,深入探讨 Linux 高级路由的概念、配置方法以及应用场景。 一、什么是 Linux 高级路由? Linux 高级路由是指利用 Linux 内核提供的强大网络功能,实现超越传统路由表和默…

鸿蒙面试 2025-01-11

ArkTs 和TS的关系? ArkTS(方舟开发语言)与 TypeScript(TS)存在紧密联系,同时也有显著区别: 联系 语法基础:ArkTS 在语法层面大量借鉴了 TypeScript ,TypeScript 里诸如…

SOLID原则学习,接口隔离原则(Interface Segregation Principle, ISP)

文章目录 1. 定义2. 为什么要遵循接口隔离原则?3. 违反接口隔离原则的例子4. 遵循接口隔离原则的改进5. 总结 1. 定义 接口隔离原则(Interface Segregation Principle, ISP) 接口隔离原则是面向对象设计中的五大原则(SOLID&#…

Deep Attentional Guided Image Filtering

This work achieved the first place in the real depth map SR challenge held in ACM ICMR 2021. 目的:从一个target image(如低分辨的深度图)和guidance image(如高分辨的RGB图),得到输出(如高分辨的深度图)。 主要思想是考虑了target和guidance之间的…

【9.3】树结构-恢复二叉搜索树

一、题目 给你二叉搜索树的根节点 root ,该树中的 恰好 两个节点的值被错误地交换。请在不改变其结构的情况下,恢复这棵树 。 示例 1: 输入:root [1,3,null,null,2] 输出:[3,1,null,null,2] 解释:3 不能是…