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

Golang学习笔记_25——协程

Golang学习笔记_22——Reader示例
Golang学习笔记_23——error补充
Golang学习笔记_24——泛型


文章目录

    • 协程
      • 1. 协程的创建
      • 2. 特性
      • 3. 声明周期
    • 源码


协程

Golang(也称为Go语言)中的协程(Goroutine)是一种轻量级的线程,由Go运行时管理。

它们提供了一种高效的方式来并发执行任务。在Go中,协程是非常轻量级的,创建和销毁它们的开销非常小,这使得在Go程序中大量使用协程成为可能。

1. 协程的创建

在Go中,你可以通过go关键字来创建一个新的协程。

go关键字后面跟的是一个函数调用。当Go运行时遇到go关键字时,它会在一个新的协程中异步执行该函数调用。

func goroutineFunc() {
	fmt.Println("goroutine func")
}

func goroutineDemo() {
	go goroutineFunc()
	time.Sleep(1 * time.Second)
}

测试方法

func Test_goroutineDemo(t *testing.T) {
	goroutineDemo()
}

输出结果

=== RUN   Test_goroutineDemo
goroutine func
--- PASS: Test_goroutineDemo (1.00s)
PASS

2. 特性

  1. 轻量级:协程的创建和切换开销非常小,可以在一个程序中创建大量协程。
  2. 自动调度:协程由Go运行时自动调度,开发者不需要手动管理线程的创建和销毁。
  3. 共享内存:协程之间可以共享相同的地址空间,简化了内存管理和数据共享。
  4. 非阻塞:协程之间的通信和同步是非阻塞的,避免了传统线程中的锁竞争问题。

3. 声明周期

  1. 等待协程完成:在多协程场景中,主程序通常需要等待所有协程完成后再退出。Go提供了sync.WaitGroup工具来等待一组协程完成。
  2. 取消协程执行:在某些情况下,我们可能需要提前取消协程的执行。Go的context包提供了上下文管理功能,允许在协程之间传递取消信号。

源码

// goroutine.go 文件
package goroutine_demo

import (
	"fmt"
	"time"
)

func goroutineFunc() {
	fmt.Println("goroutine func")
}

func goroutineDemo() {
	go goroutineFunc()
	time.Sleep(1 * time.Second)
}
// goroutine_test.go 文件
package goroutine_demo
import "testing"

func Test_goroutineDemo(t *testing.T) {
	goroutineDemo()
}

http://www.kler.cn/a/504380.html

相关文章:

  • Java Stream流操作List全攻略:Filter、Sort、GroupBy、Average、Sum实践
  • 【MySQL实战】mysql_exporter+Prometheus+Grafana
  • type 属性的用途和实现方式(图标,表单,数据可视化,自定义组件)
  • stb_image简单使用
  • C++ ——— 内部类
  • 硬件设计-七位半电压表硬件方案(下)
  • 服务器一次性部署One API + ChatGPT-Next-Web
  • Shell Integration Unavailable VSCode + Cline 报错解决
  • 如何检测服务器中的DDOS攻击?
  • AUTOSAR从入门到精通-汽车信息安全框架(二)
  • 小米vela系统(基于开源nuttx内核)——openvela开源项目
  • 【Axure】1500+实用图标库
  • Unity 语音转文字 Vosk 离线库
  • 20.2、主流数据库安全分析与防护
  • 查看 Linux 系统的版本信息
  • JAVA实现2048小游戏(附源码)
  • python实现音频文件格式转换(mp3,m4a,wav,wma,aac...)
  • 【数据库系统概论】第5章 数据库完整性【!触发器】
  • 【掌握 JavaScript 数组迭代:map 和 includes 的使用技巧】
  • Windows 正确配置android adb调试的方法
  • 三小时深度学习PyTorch
  • 嵌入式无人机: 防止信号被有意干扰入侵策略
  • pip install transformers教程
  • Flink集成TDEngine来批处理或流式读取数据进行流批一体化计算(Flink SQL)拿来即用的案例
  • rk3568 , buildroot , qt ,使用sqlite, 动态库, 静态库
  • 操作系统八股文学习笔记