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

go语言中协程详解

在 Go 语言中,协程通常是指 Goroutine,它们是实现并发编程的重要构建块。以下是对协程(Goroutine)的详解:

1. 什么是协程(Goroutine)

协程是一种轻量级的线程,由 Go 运行时管理。它们允许在同一地址空间中并发执行多个函数。使用 go 关键字可以创建一个新的 Goroutine。

2. 创建 Goroutine

创建 Goroutine 的基本语法如下:

go functionName(arguments)

例如:

go func() {
    fmt.Println("Hello from Goroutine!")
}()

3. 特性

  • 轻量性:与操作系统线程相比,Goroutine 的开销非常小,通常为几 KB。
  • 调度:Go 运行时负责调度 Goroutine 的执行,可以在多个 CPU 核心之间自动分配。
  • 非阻塞性:一个 Goroutine 的阻塞操作不会影响其他 Goroutine 的执行。

4. Goroutine 的生命周期

Goroutine 可能在以下情况下结束:

  • 函数执行完毕。
  • 主程序退出。

5. 通信与同步

Goroutine 之间的通信通常通过通道(channel)实现。通道是一种安全的数据传递方式,使用 make 函数创建通道:

ch := make(chan int)

可以通过 ch <- value 发送数据,通过 value := <-ch 接收数据。

6. 示例代码

下面是一个使用 Goroutine 和通道的示例:

package main

import (
    "fmt"
    "time"
)

func worker(id int, ch chan<- int) {
    time.Sleep(time.Second)
    ch <- id * 2 // 发送结果到通道
}

func main() {
    ch := make(chan int)

    for i := 0; i < 5; i++ {
        go worker(i, ch)
    }

    for i := 0; i < 5; i++ {
        result := <-ch // 接收结果
        fmt.Println(result)
    }
}

在这个例子中,我们创建了多个 Goroutine,每个 Goroutine 都执行 worker 函数,并将结果发送到通道中。

7. 错误处理

在 Goroutine 中,错误处理可以通过 recover 实现,以防止程序因未处理的错误崩溃:

go func() {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Recovered in Goroutine:", r)
        }
    }()
    // 可能引发错误的代码
}()


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

相关文章:

  • 基于vue框架的的考研信息共享平台v0eyp(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。
  • 解决Latex正文中的参考文献有许多[0]的情况
  • 【C++】位图详解(一文彻底搞懂位图的使用方法与底层原理)
  • Windows下基于fping进行批量IP测试
  • 【STM32】SD卡
  • 从倍压整流到二极管钳位与限幅
  • Java8的新特性——Stream与completableFuture详解
  • 数字隔离器与光隔离器有何不同?---腾恩科技
  • 「Mac畅玩鸿蒙与硬件18」鸿蒙UI组件篇8 - 高级动画效果与缓动控制
  • spreadjs实现类似于企业微信的协同提示
  • Linux 查看 nginx 安装目录和配置文件路径
  • LeetCode994. 腐烂的橘子(2024秋季每日一题 54)
  • 智能护栏碰撞监测终端:内蒙古高速的安全守护者
  • vite和webpack
  • 在工作中常用到的 Linux 命令总结
  • 算法实现 - 快速排序(Quick Sort) - 理解版
  • 2. 从服务器的主接口入手
  • Android 蚂蚁面经
  • 第三十三章:docker 启动mysql web管理工具- MyWebSQL
  • Hadoop:单机伪分布式部署
  • 大学城水电管理系统开发:Spring Boot指南
  • 【qwen2-1.5-instruct 好于Gemma2-2b-instruct\Llama3.2-1B-instruct】
  • 智慧税务管理:金融企业报税效率与合规性提升
  • uniapp 如何调用音频
  • 2021-10-28 51蛋骗鸡独立按键控制LED和蜂鸣器
  • B+树等树的定义和详细说明