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

【go从零单排】初探goroutine

挪威特罗姆瑟夜景

🌈Don’t worry , just coding!
内耗与overthinking只会削弱你的精力,虚度你的光阴,每天迈出一小步,回头时发现已经走了很远。

📗概念

Goroutines 是 Go 语言中的一种轻量级线程,用于并发编程。它们允许程序同时执行多个任务,从而提高效率和响应性
通过在函数调用前加上 go 关键字来启动一个新的 goroutine。

💻代码

package mainimport ("fmt""time"
)// 定义函数,循环三次,打印from和:i
func f(from string) {for i := 0; i < 3; i++ {fmt.Println(from, ":", i)}
}func main() {//调用f函数f("direct")//使用 go 关键字调用 f 函数,这会在一个新的 goroutine 中异步执行 f。//由于是异步执行,主程序不会等待这个 goroutine 完成。go f("goroutine")//定义了一个匿名函数,并立即在goroutine调用它,传入字符串 "going"go func(msg string) {fmt.Println(msg)}("going")//主程序暂停执行 1 秒,以确保有足够的时间让 goroutine 执行完毕。//如果主程序在 goroutine 完成之前结束,程序将直接退出,导致可能看不到 goroutine 的输出。time.Sleep(time.Second)//尝试把这行代码注释掉再运行,就会看不到goroutine的打印了fmt.Println("done")
}
//输出
//direct : 0
//direct : 1
//direct : 2
//going
//goroutine : 0
//goroutine : 1
//goroutine : 2
//done

channel

Goroutines 之间的通信通常使用 通道(channels) 来实现。通道是一种数据结构,用于在 goroutines 之间传递数据,确保数据的安全传递。

ch := make(chan string)go func() {ch <- "Hello from goroutine!"
}()msg := <-ch
fmt.Println(msg)

🔍理解

  • 轻量级:创建和销毁 goroutine 的开销非常小。与传统线程相比,goroutines 占用的内存更少,可以在同一地址空间中运行成千上万的 goroutines。

  • 调度:Go 运行时会负责调度 goroutines。它会在单个或多个操作系统线程上运行这些 goroutines,自动处理上下文切换。

  • 非阻塞:Goroutines 是非阻塞的,这意味着它们可以在等待某些操作(如 I/O 操作)时让出控制权,从而允许其他 goroutines 继续执行

  • Goroutines 是 Go 语言中实现并发的核心特性之一,go和python比起来更快的核心就是它!

💡 Tips小知识点

💪无人扶我青云志,我自踏雪至山巅。
在这里插入图片描述

http://www.lryc.cn/news/481478.html

相关文章:

  • HarmonyOS NEXT应用元服务开发Intents Kit(意图框架服务)本地搜索接入方案
  • C语言可变参数列表编程实战指南:从基础概念到高级应用的全面解析
  • AndroidStudio-文本显示
  • HBuilderX运行微信小程序,编译的文件在哪,怎么运行
  • 百亿AI数字人社会初现:Project Sid展示智能代理文明进化路径
  • 代码随想录训练营Day21 | 491.递增子序列 - 46.全排列 - 47.全排列 II - 332.重新安排行程 - 51.N皇后 - 37.解数独
  • 多用户商城系统的功能及设计和开发
  • 2024年11月8日day8
  • Debezium系列之:Debezium3版本增量快照和只读增量快照应用的变化
  • Python正则表达式1 re.match惰性匹配详解案例
  • WPF(C#)学习日志10:Prism框架下按键绑定
  • WPF中的ResizeMode
  • Unity3D UI 双击和长按
  • LabVIEW扫描探针显微镜系统
  • 问题式教学法在生物教学中的应用探索
  • C++ | Leetcode C++题解之第556题下一个更大元素III
  • 实现链式结构二叉树
  • 在vscode中如何利用git 查看某一个文件的提交记录
  • 【ShuQiHere】️`adb kill-server` 和 `adb start-server` 命令的作用
  • 植物明星大乱斗1
  • 信息安全工程师(84)UNIX/Linux操作系统安全分析与防护
  • 全面解析 Python typing模块与静态类型注解:从基础到高级
  • Jekins篇(搭建/安装/配置)
  • 【工具变量】排污权交易政策试点DID(2000-2023)
  • Proteus中数码管动态扫描显示不全(已解决)
  • 证件照尺寸168宽240高,如何手机自拍更换蓝底
  • 力扣.167 两数之和 II two-sum-ii
  • ipconfig
  • Qt_day3_信号槽
  • 求从2开始的第n个素数