当前位置: 首页 > 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小知识点

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

相关文章:

【go从零单排】初探goroutine

&#x1f308;Don’t worry , just coding! 内耗与overthinking只会削弱你的精力&#xff0c;虚度你的光阴&#xff0c;每天迈出一小步&#xff0c;回头时发现已经走了很远。 &#x1f4d7;概念 Goroutines 是 Go 语言中的一种轻量级线程&#xff0c;用于并发编程。它们允许程…...

HarmonyOS NEXT应用元服务开发Intents Kit(意图框架服务)本地搜索接入方案

一、方案概述 当用户使用应用/元服务时&#xff0c;开发者可以按照标准意图Schema向系统共享数据&#xff0c;并支持意图调用&#xff08;空调用与传参调用&#xff09;&#xff0c;以实现用户点击卡片后&#xff0c;可后台执行功能&#xff08;例如播放指定歌曲&#xff09;或…...

C语言可变参数列表编程实战指南:从基础概念到高级应用的全面解析

引言 在C语言中&#xff0c;可变参数列表的功能使得函数能够灵活地处理不确定数量的输入参数。本文将深入探讨可变参数列表的基础概念、技术原理及其在实际编程中的应用&#xff0c;帮助开发者更好地理解和使用这一特性。 一、可变参数列表的基本概念 1.1 什么是可变参数列表…...

AndroidStudio-文本显示

一、设置文本的内容 1.方式&#xff1a; &#xff08;1&#xff09;在XML文件中通过属性&#xff1a;android:text设置文本 例如&#xff1a; <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.andr…...

HBuilderX运行微信小程序,编译的文件在哪,怎么运行

1. 点击HBuilderX顶部的运行-运行到小程序模拟器-微信开发者工具&#xff0c;就会开始编译 2. 编译完成后的文件在根目录找到 unpackage -- dist -- dev -- mp-weixin, 这里面就是编译后的文件&#xff0c;如果未跳转到开发者工具&#xff0c;那可能是没设置启动路径&#xff0…...

百亿AI数字人社会初现:Project Sid展示智能代理文明进化路径

项目背景 Project Sid 是一项开创性的AI代理人文明实验,旨在通过新开发的认知架构 PIANO 探讨AI代理人是否能够在大规模数字社会中实现文明的演进。这项实验不仅展示了社会进步、角色分化、治理体系及文化传播等特征,还揭示了一个包含百亿“数字人类”的社会可能性。 PIANO…...

代码随想录训练营Day21 | 491.递增子序列 - 46.全排列 - 47.全排列 II - 332.重新安排行程 - 51.N皇后 - 37.解数独

491.递增子序列 题目链接&#xff1a;491.递增子序列思路&#xff1a;和子集那道题思路很像&#xff0c;每次在数组中选择一个数&#xff0c;选过的数不能选择&#xff0c;这里要求集合数量必须大于2个才能符合&#xff0c;仍然需要去重&#xff0c;但这里选额的是子序列&…...

多用户商城系统的功能及设计和开发

多用户商城系统的功能及设计与开发&#xff08;基于 PHP MySQL&#xff09; 在现代电子商务平台的开发中&#xff0c;PHP MySQL 是一对非常流行且高效的技术栈。PHP作为服务器端脚本语言&#xff0c;结合MySQL数据库&#xff0c;可以高效地处理多用户商城系统的各种需求。本…...

2024年11月8日day8

半加器和全加器的区别 半加器&#xff1a;只能处理两个二进制位的相加&#xff0c;无法处理进位。全加器&#xff1a;不仅能处理两个二进制位的相加&#xff0c;还能处理来自低位的进位。 ⑴ 完成满足754标准存储格式的浮点数&#xff08;(43940000)16的十进制数值&#xff09…...

Debezium系列之:Debezium3版本增量快照和只读增量快照应用的变化

Debezium系列之:Debezium3版本增量快照和只读增量快照应用的变化 一、需求背景二、基于数据库信号表使用增量快照案例三、基于Kafka信号Topic使用增量快照案例四、只读增量快照案例五、增量快照技术总结增量快照相关知识请阅读博主下面系列文章: Debezium系列之:实现增量快照…...

Python正则表达式1 re.match惰性匹配详解案例

点个关注 re.match() re.match() 函数尝试从字符串的开头开始匹配一个模式&#xff0c;如果匹配成功&#xff0c;返回一个匹配成功的对象&#xff0c;否则返回None。大小写区分&#xff0c;内容匹配不到后面的,只能匹配一个&#xff0c;不能有空格&#xff08;开头匹配&#…...

WPF(C#)学习日志10:Prism框架下按键绑定

在Prism框架下&#xff0c;提供了DelegateCommand类用于处理了UI的按键请求&#xff0c;XAML中可以直接采用 Command"{Binding **}" 来绑定这些方法。这个类是一个泛型的类生命时仅需要DelegateCommand<T>即可&#xff0c;同时在XAML中绑定CommandParameter&qu…...

WPF中的ResizeMode

在 WPF (Windows Presentation Foundation) 中&#xff0c;ResizeMode 属性用于指定窗口是否可以被用户调整大小&#xff0c;以及如何调整大小。ResizeMode 属性可以设置为以下几个值之一&#xff1a; NoResize&#xff1a;窗口不能被用户调整大小&#xff0c;但可以被程序代码…...

Unity3D UI 双击和长按

Unity3D 实现 UI 元素双击和长按功能。 UI 双击和长按 上一篇文章实现了拖拽接口&#xff0c;这篇文章来实现 UI 的双击和长按。 双击 创建脚本 UIDoubleClick.cs&#xff0c;创建一个 Image&#xff0c;并把脚本挂载到它身上。 在脚本中&#xff0c;继承 IPointerClickHa…...

LabVIEW扫描探针显微镜系统

开发了一套基于LabVIEW软件开发的扫描探针显微镜系统。该系统专为微观尺度材料的热性能测量而设计&#xff0c;特别适用于纳米材料如石墨烯、碳纳米管等的研究。系统通过LabVIEW编程实现高精度的表面形貌和热性能测量&#xff0c;广泛应用于科研和工业领域。 项目背景 随着纳…...

问题式教学法在生物教学中的应用探索

问题式教学法在生物教学中的应用探索 李新 山东省德州市平原县第五中学 山东 德州 253100 摘要&#xff1a;时代在发展教育事业也在不断进步&#xff0c;不断创新教学方法有利于提高教学质量。问题教学法能让教材知识点以问题的形式呈现在学生眼前&#xff0c;这对引导学生…...

C++ | Leetcode C++题解之第556题下一个更大元素III

题目&#xff1a; 题解&#xff1a; class Solution { public:int nextGreaterElement(int n) {int x n, cnt 1;for (; x > 10 && x / 10 % 10 > x % 10; x / 10) {cnt;}x / 10;if (x 0) {return -1;}int targetDigit x % 10;int x2 n, cnt2 0;for (; x2 …...

实现链式结构二叉树

目录 需要实现的操作 链式结构二叉树实现 结点的创建 前序遍历 中序遍历 后序遍历 计算结点个数 计算二叉树的叶子结点个数 计算二叉树第k层结点个数 计算二叉树的深度 查找值为x的结点 销毁 层序遍历 判断是否为完全二叉树 总结 需要实现的操作 //前序遍历 void …...

在vscode中如何利用git 查看某一个文件的提交记录

在 Visual Studio Code (VSCode) 中&#xff0c;你可以使用内置的 Git 集成来查看某个文件的提交历史。以下是具体步骤&#xff1a; 使用 VSCode 内置 Git 功能 打开项目&#xff1a; 打开你的项目文件夹&#xff0c;确保该项目已经是一个 Git 仓库&#xff08;即项目根目录下…...

【ShuQiHere】️`adb kill-server` 和 `adb start-server` 命令的作用

&#x1f4df;&#x1f527; 【ShuQiHere】️ &#x1f527;&#x1f4df; 在使用 scrcpy 或其他依赖于 ADB&#xff08;Android Debug Bridge&#xff09; 的工具时&#xff0c;您可能会遇到需要重启 ADB 服务器的情况。今天&#xff0c;我们将详细解释两个常用的 ADB 命令&a…...

脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)

一、数据处理与分析实战 &#xff08;一&#xff09;实时滤波与参数调整 基础滤波操作 60Hz 工频滤波&#xff1a;勾选界面右侧 “60Hz” 复选框&#xff0c;可有效抑制电网干扰&#xff08;适用于北美地区&#xff0c;欧洲用户可调整为 50Hz&#xff09;。 平滑处理&…...

React Native 开发环境搭建(全平台详解)

React Native 开发环境搭建&#xff08;全平台详解&#xff09; 在开始使用 React Native 开发移动应用之前&#xff0c;正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南&#xff0c;涵盖 macOS 和 Windows 平台的配置步骤&#xff0c;如何在 Android 和 iOS…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:

一、属性动画概述NETX 作用&#xff1a;实现组件通用属性的渐变过渡效果&#xff0c;提升用户体验。支持属性&#xff1a;width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项&#xff1a; 布局类属性&#xff08;如宽高&#xff09;变化时&#…...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八

现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet&#xff0c;点击确认后如下提示 最终上报fail 解决方法 内核升级导致&#xff0c;需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

线程与协程

1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指&#xff1a;像函数调用/返回一样轻量地完成任务切换。 举例说明&#xff1a; 当你在程序中写一个函数调用&#xff1a; funcA() 然后 funcA 执行完后返回&…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)

目录 1.TCP的连接管理机制&#xff08;1&#xff09;三次握手①握手过程②对握手过程的理解 &#xff08;2&#xff09;四次挥手&#xff08;3&#xff09;握手和挥手的触发&#xff08;4&#xff09;状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法&#xff0c;用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理&#xff0c;能够自动确定一个阈值&#xff0c;将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

高等数学(下)题型笔记(八)空间解析几何与向量代数

目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版&#xff01;&#xff01;&#xff01;6.8截至答题&#xff0c;大家注意呀&#xff01; 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:&#xff08; B &#xff09; A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...