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

go语言创建协程

前言

        Go 语言中,协程是通过 go 关键字来创建的,这使得 Go 语言成为实现并发程序的一个非常直观和强大的工具。Go 运行时管理着协程,这些协程在内部被称为 goroutine。

        协程(goroutines)本身是轻量级的线程,由 Go 运行时管理。它们设计为非阻塞的,因为 Go 运行时会在一个协程阻塞时(例如,由于I/O操作)自动切换到其他协程继续执行,从而提高程序的并发性能。

一、测试用例

package mainimport ("fmt""time"
)// 定义一个函数,该函数将由协程执行
func printNumbers() {for i := 0; i < 10; i++ {fmt.Println(i)// 延时处理time.Sleep(100 * time.Millisecond)}
}func main() {// 使用 go 关键字启动协程go printNumbers()// 非阻塞 主函数继续执行,不会等待协程完成for i := 0; i < 5; i++ {fmt.Printf("Main is running: %d\n", i)time.Sleep(200 * time.Millisecond)}}

程序的退出依赖于主函数的结束,但在go语言中协程是并发运行的,它们有自己的执行栈和运行状态。如果协程在主函数结束后还在运行,它们将继续执行,直到协程执行完毕自然退出。

二、协程与通道的使用

package mainimport ("fmt""sync"
)func consumer(id int, ch <-chan int, wg *sync.WaitGroup) {for n := range ch {fmt.Printf("Consumer %d received %d\n", id, n)}wg.Done()
}func main() {ch := make(chan int)var wg sync.WaitGroupfor i := 1; i <= 3; i++ {wg.Add(1)go consumer(i, ch, &wg)}for n := 1; n <= 9; n++ {ch <- n}close(ch)wg.Wait()fmt.Println("All consumers are done.")
}

协程(goroutines)和通道(channels)是并发编程的两个基本工具,经常结合在一起使用,以实现复杂的并发模式。协程是轻量级的线程;而通道提供了协程之间的通信机制。

以上的生产者-消费者模式:创建了三个消费者的协程,并往通道中写入数据,协程再将数据进行打印输出。通道用来在协程之间传递数据,也作为同步机制来控制协程的执行顺序。 

相关文章:

go语言创建协程

前言 Go 语言中&#xff0c;协程是通过 go 关键字来创建的&#xff0c;这使得 Go 语言成为实现并发程序的一个非常直观和强大的工具。Go 运行时管理着协程&#xff0c;这些协程在内部被称为 goroutine。 协程&#xff08;goroutines&#xff09;本身是轻量级的线程&#xff0c;…...

RabbitMQ之基于注解声明队列交换机:使用@RabbitListener实现消息监听

文章目录 什么是RabbitListener&#xff1f;队列和交换机的基本概念使用RabbitListener注解声明队列和交换机代码解析1. QueueBinding2. 消费者方法 运行原理应用场景总结 在现代的微服务架构中&#xff0c;消息队列是一种重要的异步通信机制。RabbitMQ作为一种流行的消息代理软…...

【grafana 】mac端grafana配置的文件 grafana.ini 及login

brew services start grafana 以后,怎么知道mac端的配置文件的路径 brew services restart grafana#brew services start grafana在macOS上使用Homebrew安装并启动Grafana服务后,通常的配置文件路径是在以下两个位置之一: Homebrew默认配置文件路径:/usr/local/etc/grafana…...

程序员如何在人工智能时代保持核心竞争力

目录 1.概述 1.1. 技术深度与广度的平衡 1.2. 软技能的培养 1.3. 持续学习和适应性 1.4. 理解和应用AI 1.5. 伦理和责任意识 2.AI辅助编程对程序员工作的影响 2.1.AI工具对编码实践的积极影响 2.2.AI工具的潜在风险 2.3.如何平衡利与弊 3.程序员应重点发展的核心能力…...

回溯排列+棋盘问题篇--代码随想录算法训练营第二十三天| 46.全排列,47.全排列 II,51. N皇后,37. 解数独

46.全排列 题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 讲解视频&#xff1a; 组合与排列的区别&#xff0c;回溯算法求解的时候&#xff0c;有何不同&#xff1f; 题目描述&#xff1a; 给定一个不含重复数字的数组 nums &#xff0c;返回其 所有可能…...

ESXI加入VMware现有集群提示常规性错误

集群内有vSphere6.5和6.7的版本&#xff0c;都开启了EVC 这台老服务器是DELL R710添加时报错&#xff0c;网上查了些资料说要重装ESXI或者关闭EVC等等 最终解决方法是&#xff0c;给这台ESXI配置一个NTP服务器&#xff0c;同步系统时间&#xff0c;之后即可正常加入集群 往期文…...

数字噪音计(声级计)【AR814数字噪音计】

系统介绍 声级计&#xff0c;又叫噪音计&#xff0c;是噪声测量中最基本的仪器。声级计一般由电容式传声器、前置放大器、衰减器、放大器、频率计权网络以及有效值指示表头等组成。 声级计的工作原理是&#xff1a;由传声器将声音转换成电信号&#xff0c;再由前置放大器放大…...

【Vue3】图片未加载成功前占位

背景 在写项目时&#xff0c;加载图片未成功前&#xff0c;会出现空白页面&#xff0c;太影响美观和体验感 解决方案 1. element ui通过slot占位符解决 2. 自定义指令 原生img标签可以通过自定义指令解决&#xff0c;img标签有onload和onerror事件&#xff0c;都是在渲染成…...

AbstractQueuedSynchronizer之AQS

目录 AQS简单入门为什么说AQS是JUC包下的重要基石AQS能干嘛&#xff1f;实际实现原理AQS自身成员变量Node内部类的成员变量源码解读总结 AQS简单入门 AQS是抽象的队列同步器&#xff0c;是用来实现锁或者其它同步器组件的公共基础部分的抽象实现&#xff0c;是重量级基础框架及…...

<数据集>起重机识别数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;2984张 标注数量(xml文件个数)&#xff1a;2984 标注数量(txt文件个数)&#xff1a;2984 标注类别数&#xff1a;1 标注类别名称&#xff1a;[cranes] 使用标注工具&#xff1a;labelImg 标注规则&#xff1a;对…...

04--Docker

前言&#xff1a;前面写过关于DockerKubernetes的部署&#xff0c;主要是针对国产化linux系统的适配问题&#xff0c;并没有对docker进行复习。这里整理一下docker的知识点&#xff0c;用作容器化微服务的起点&#xff0c;主要为日常工作配置使用&#xff0c;本章可能有点长&am…...

MiniCPM-V: A GPT-4V Level MLLM on Your Phone 手机上的 GPT-4V 级多模态大模型

GitHub - OpenBMB/MiniCPM-V: MiniCPM-V 2.6: A GPT-4V Level MLLM for Single Image, Multi Image and Video on Your Phone 2408.01800 (arxiv.org) 目录 Introduction Model Architecture Training End-side Deployment MiniCPM-V是一种高效的多模态大型语言模型&…...

Unity初识

1&#xff1a;下载Unity Hub 下载地址&#xff1a;Unity官方下载_Unity最新版_从Unity Hub下载安装 | Unity中国官网 建议直接使用unity hub因为支持比较全面&#xff0c;适合新手 有中文 管理 编辑器等等功能支持 下载安装不过多介绍 2&#xff1a;Unity Hub汉化 因为我…...

【游戏引擎之路】登神长阶(九)——《3D游戏编程大师技巧》:我想成为游戏之神!

5月20日-6月4日&#xff1a;攻克2D物理引擎。 6月4日-6月13日&#xff1a;攻克《3D数学基础》。 6月13日-6月20日&#xff1a;攻克《3D图形教程》。 6月21日-6月22日&#xff1a;攻克《Raycasting游戏教程》。 6月23日-7月1日&#xff1a;攻克《Windows游戏编程大师技巧》。 7月…...

Linux:线程同步之信号量

信号量 (1)What&#xff08;什么是信号量&#xff09; 提供一种计数器的方式控制对共享资源的访问&#xff1b;当计数器大于0时&#xff0c;请求资源成功并计数器-1&#xff1b;当计数器小于0时&#xff0c;线程阻塞&#xff0c;等待其它线程执行signal&#xff08;V操作&…...

GPT-SoVITS-文本转语音(你的声音不再是唯一)

本文将要介绍GPT-SoVITS的安装和使用方法 首先感谢花儿不哭大佬带来的RVC声音克隆 花儿不哭&#xff1a; 花儿不哭的个人空间-花儿不哭个人主页-哔哩哔哩视频 (bilibili.com) GPT-SoVITS下载地址 GitHub - RVC-Boss/GPT-SoVITS: 1 min voice data can also be used to train a …...

C语言深度剖析(部分)--剩下随缘更新

C语言深度剖析 关键字auto-最宽容大度的关键字 变量的分类 代码块&#xff1a;用{ }括起来的区域 局部变量&#xff1a;包含在代码块中的变量&#xff0c;局部变量具有临时性&#xff0c;进入代码块&#xff0c;自动形成局部变量&#xff0c;退出代码块自动释放。 全局变量…...

计算机毕业设计选题推荐-电缆行业生产管理系统-Java/Python项目实战

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…...

Linux 下查看 CPU 使用率

目录 一、什么是 CPU 使用率二、查看 CPU 利用率1、使用 top 查看2、用 pidstat 查看3、用 ps 查看4、用 htop 查看5、用 nmon 查看6、用 atop 查看7、用 glances 查看8、用 vmstat 查看9、用 sar 查看10、dstat11、iostat 三、总结 CPU 使用率是最直观和最常用的系统性能指标&…...

数理基础知识

数理基础 大数定律期望方差常见分布伯努利分布泊松分布高斯分布服从一维高斯分布的随机变量KL散度服从多元高斯分布的随机变量KL散度 Gibbs不等式凸函数Jensen不等式 似然函数泰勒近似信息论信息量信息熵KL散度JS散度交叉熵 Wiener ProcessSDE 大数定律 期望方差 x为连续随机…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查

在对接支付宝API的时候&#xff0c;遇到了一些问题&#xff0c;记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

Linux链表操作全解析

Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表&#xff1f;1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

反向工程与模型迁移:打造未来商品详情API的可持续创新体系

在电商行业蓬勃发展的当下&#xff0c;商品详情API作为连接电商平台与开发者、商家及用户的关键纽带&#xff0c;其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息&#xff08;如名称、价格、库存等&#xff09;的获取与展示&#xff0c;已难以满足市场对个性化、智能…...

c++ 面试题(1)-----深度优先搜索(DFS)实现

操作系统&#xff1a;ubuntu22.04 IDE:Visual Studio Code 编程语言&#xff1a;C11 题目描述 地上有一个 m 行 n 列的方格&#xff0c;从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子&#xff0c;但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

MySQL用户和授权

开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务&#xff1a; test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...

苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会

在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...

零知开源——STM32F103RBT6驱动 ICM20948 九轴传感器及 vofa + 上位机可视化教程

STM32F1 本教程使用零知标准板&#xff08;STM32F103RBT6&#xff09;通过I2C驱动ICM20948九轴传感器&#xff0c;实现姿态解算&#xff0c;并通过串口将数据实时发送至VOFA上位机进行3D可视化。代码基于开源库修改优化&#xff0c;适合嵌入式及物联网开发者。在基础驱动上新增…...

uniapp 实现腾讯云IM群文件上传下载功能

UniApp 集成腾讯云IM实现群文件上传下载功能全攻略 一、功能背景与技术选型 在团队协作场景中&#xff0c;群文件共享是核心需求之一。本文将介绍如何基于腾讯云IMCOS&#xff0c;在uniapp中实现&#xff1a; 群内文件上传/下载文件元数据管理下载进度追踪跨平台文件预览 二…...

Java后端检查空条件查询

通过抛出运行异常&#xff1a;throw new RuntimeException("请输入查询条件&#xff01;");BranchWarehouseServiceImpl.java // 查询试剂交易&#xff08;入库/出库&#xff09;记录Overridepublic List<BranchWarehouseTransactions> queryForReagent(Branch…...