golang的协程

ops/2024/10/22 12:01:22/
  1. 启动一个协程
    使用go关键字启动一个新的协程时,就是并发地执行一个函数。换句话说,go关键字后面必须跟着一个可调用的函数(或者是一个匿名函数、闭包等)。
func sayHello() {   fmt.Println("Hello, World!")  }    
func main() {  go sayHello() // 启动一个新的协程 }
  1. 子协程的生命周期
    • 当主协程结束时,会立即终止所有其他协程。为了确保子协程在主协程退出前完成,可以使用同步机制如 sync.WaitGroup、通道(channel)或 context 包。
    • 使用go起一个协程后,子协程是并发的,并不影响原程序继续执行,并不会阻塞,所以要防止主协程在子协程结束前退出。
  2. select
    • select语句用于处理多个通信操作,它类似于 switch 语句,但它专门用于处理通道(channel)。它会在多个通道操作上等待,直到其中一个通道可以进行发送或接收操作。
    • select 语句会阻塞,直到其中一个 case 可以执行。如果有多个 case 都可以执行,select 会随机选择一个执行。
    • 如果某个通道被关闭,接收操作会立即成功并返回通道类型的零值,而无需阻塞。
select {  case <-chan1:  // 当从chan1成功接收到数据时执行的代码  case chan2 <- 1:  // 当成功向chan2发送数据时执行的代码  default:  // 如果没有任何通道操作准备就绪时执行的代码  
}
  1. channel
    在Go语言中,channel是一种用于协程(goroutine)之间进行通信和数据同步的机制。它可以被看作是一种特殊的数据类型,类似于队列或管道,用于在不同的协程之间传递数据。
    • 如果向一个未初始化的channel发送数据,发送操作会永远阻塞。
    • 关闭后的channel不能再发送数据,否则会导致运行时错误。
    • 从已关闭的channel接收数据会得到零值:当channel被关闭且没有更多数据时,接收操作会立即返回一个对应类型的零值。
    • 关闭channel不是必须的:只有在通知接收方所有的数据都发送完毕的时候才需要关闭channel。关闭一个已经关闭的channel会导致panic。
  2. context
    我的博客:https://blog.csdn.net/m0_51866860/article/details/142234364

http://www.ppmy.cn/ops/127558.html

相关文章

Java爬虫:从入门到精通实战指南

在信息技术飞速发展的今天&#xff0c;数据已成为最宝贵的资源之一。Java作为一种成熟且功能强大的编程语言&#xff0c;不仅在企业级应用开发中占据主导地位&#xff0c;也成为了编写爬虫程序的理想选择。Java爬虫能够自动化地从网页或API中提取数据&#xff0c;为数据分析、机…

HttpURLConnection和OkHttp的特点

HttpURLConnection与OkHttp概述及个人倾向性分析 在Java和Android开发中&#xff0c;HttpURLConnection与OkHttp都是用于处理HTTP请求的库&#xff0c;它们在功能、性能、易用性等方面各有千秋。本文将详细阐述两者的特点&#xff0c;并结合个人使用经验&#xff0c;表达我对哪…

WSL2 构建Ubuntu系统-轻量级AI运行环境

环境&#xff1a;Win11 软件&#xff1a;WSL2 安装环境&#xff1a;Ubuntu 22.04 检查电脑是否开启虚拟化 打开&#xff1a;任务管理器->性能->CPU CPU 开启虚拟化&#xff08;通常默认是开启的&#xff0c;如果没有开启需要BIOS开启&#xff09; 虚拟化设置&#xff0…

Python GIF压缩工具实现详解:PIL的实践

在本文中&#xff0c;我们将详细分析一个使用Python开发的GIF压缩工具的实现。这个工具结合了wxPython的GUI框架和PIL(Python Imaging Library)的图像处理能力&#xff0c;提供了两种压缩方式&#xff1a;颜色深度压缩和帧数压缩。 C:\pythoncode\new\gifcompress.py 全部代码…

PostgreSQL的学习心得和知识总结(一百五十五)|[performance]优化期间将 WHERE 子句中的 IN VALUES 替换为 ANY

目录结构 注&#xff1a;提前言明 本文借鉴了以下博主、书籍或网站的内容&#xff0c;其列表如下&#xff1a; 1、参考书籍&#xff1a;《PostgreSQL数据库内核分析》 2、参考书籍&#xff1a;《数据库事务处理的艺术&#xff1a;事务管理与并发控制》 3、PostgreSQL数据库仓库…

正则化、交叉验证、

正则化 是机器学习中用来防止模型过拟合的一种技术。过拟合是指模型在训练数据上表现很好&#xff0c;但在新的、未见过的数据上表现不佳。正则化通过在损失函数中添加一个额外的项来实现&#xff0c;这个额外的项通常与模型的复杂度相关。下面是正则化项的作用和意义&#xf…

FPGA实现UDP通信(2)——通信接口简介

1.概述 网口相信对于大家来说并不陌生,无论是笔记本、台式机、还是交换机、路由器,上面都有网口,事实上,从专业的角度名词来说,这些网口都被称为RJ45接口。如下图所示: 但从功能来说,这些网口只是起到一个信号连接的作用,本身无主动通信的能力,一个典型的网络通信电路…

AttributeError: module ‘lib‘ has no attribute ‘OpenSSL_add_all_algorithms‘

问题&#xff1a;AttributeError: module ‘lib’ has no attribute ‘OpenSSL_add_all_algorithms’ 分析 在使用certbot时&#xff0c;报了这个错误&#xff0c;该问题是没有安装openssl包 解决 pip3 install pyOpenSSL 安装后再次运行如果还是报错&#xff0c;请降低加…