当前位置: 首页 > 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…...

AP的全称是什么?

AP 的全称是 Access Point。 中文常叫 无线接入点 或 无线 AP&#xff0c;一般指 Wi‑Fi 路由器 / 热点 里负责 让手机、笔记本、POS 等无线接入局域网 的那一部分&#xff08;有时也整台设备被口语叫成 AP&#xff09;。 在你们文档里 「Connect the LAN port … to an AP r…...

如何构建一个基于YOLOv8的智慧化工地管理系统,用于工地要素分割与检测

如何构建一个基于YOLOv8的智慧化工地管理系统&#xff0c;用于工地要素分割与检测。该系统将涵盖10大要素&#xff08;工人佩戴安全帽、不佩戴安全帽、预制构件、混凝土运输车、渣土车、搅拌车、挖掘机、压路车、推土车、装载车&#xff09; 文章目录以下文字仅供参考&#xff…...

AI LED调光控制器智能功率 MOSFET 完整选型方案

2026年随着 AI 技术在智能照明与调光控制中的深度渗透&#xff08;如自适应色温、场景联动、人因节律照明&#xff09;&#xff0c;调光控制器对功率 MOSFET 提出更高要求&#xff1a;高精度PWM响应、超低导通损耗、高散热密度。微碧半导体&#xff08;VBsemi&#xff09;基于S…...

嘎嘎降AI全平台综合评测:2026年知网维普万方Turnitin达标率完整深度分析报告

嘎嘎降AI全平台综合评测&#xff1a;2026年知网维普万方Turnitin达标率完整深度分析报告 总有人问我选哪个降AI工具&#xff0c;这篇文章把主流的几款对比清楚。 综合推荐嘎嘎降AI&#xff08;www.aigcleaner.com&#xff09;&#xff0c;4.8元&#xff0c;99.26%达标率。不同…...

5个关键场景下如何选择DINOv2模型:从ViT-S到ViT-G的完整指南

5个关键场景下如何选择DINOv2模型&#xff1a;从ViT-S到ViT-G的完整指南 【免费下载链接】dinov2 PyTorch code and models for the DINOv2 self-supervised learning method. 项目地址: https://gitcode.com/GitHub_Trending/di/dinov2 DINOv2是Meta AI Research开发的…...

Perplexity开发者文档结构逆向工程:通过17个真实HTTP响应头+OpenAPI Schema反推隐藏端点与beta功能开关

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Perplexity开发者文档查询 Perplexity 提供了一套面向 AI 应用开发者的 RESTful API 文档体系&#xff0c;其开发者中心&#xff08;developer.perplexity.ai&#xff09;支持结构化检索、版本过滤与实…...

从DC到DCG:手把手教你搭建物理感知综合流程(含DEF文件处理避坑指南)

从DC到DCG&#xff1a;物理感知综合全流程实战指南 在28nm以下工艺节点&#xff0c;传统逻辑综合工具已难以应对复杂的物理效应。我们团队在最近一次5nm芯片项目中&#xff0c;由于初期忽视物理感知综合的约束设置&#xff0c;导致时序收敛多耗费三周时间。本文将分享从Design …...

GenAIScript:用脚本化AI工作流提升代码生成效率与工程化实践

1. 项目概述&#xff1a;当AI遇上代码生成&#xff0c;GenAIScript带来了什么&#xff1f;如果你最近在关注AI如何改变开发工作流&#xff0c;特别是微软在AI领域的动作&#xff0c;那么microsoft/genaiscript这个项目绝对值得你花时间深入研究。这不仅仅是一个简单的代码生成工…...

iMeta | 伦敦国王学院量化系统生物学组-解析肝硬化中口腔-肠道转移细菌与宿主互作

点击蓝字 关注我们整合宿主–微生物组建模揭示了口腔–肠道微生物转移在晚期肝硬化中的潜在作用iMeta主页&#xff1a;http://www.imeta.science研究论文● 期刊: iMeta (IF 33.2,中科院双一区Top)● 英文题目: Integrative host-microbiome modelling uncovers the implicatio…...

位图动画技术:用图片驱动NeoPixel灯光特效的嵌入式开发新思路

1. 项目概述与核心思路拆解如果你玩过像Adafruit Circuit Playground这样的开发板&#xff0c;肯定被它周围那一圈炫彩的NeoPixel LED灯珠吸引过。点亮它们很简单&#xff0c;但想做出一个流畅、复杂、带渐变或特定运动轨迹的动画&#xff0c;比如让灯光像水流一样旋转&#xf…...