Go语言学习
  • README
  • Go 基础
    • go语言介绍
    • go语言主要特性
    • go内置类型和函数
    • init函数和main函数
    • 下划线
    • iota
    • 字符串
    • 数据类型:数组与切片
    • 数据类型:byte、rune与字符串
    • 变量的5种创建方式
    • 数据类型:字典
    • 指针
    • 数据类型:指针
    • 类型断言
    • 流程控制:defer延迟执行
    • 异常机制:panic和recover
    • 函数
    • go依赖管理
    • go中值传递、引用传递、指针传递区别
  • 标准库
    • Go net/http包
  • 数据结构
    • 哈希表
      • 为什么对 map 的 key 或 value 进行取址操作是不允许的
  • Gin
    • gin 快速开始
    • gin-swagger用法
  • Go 进阶
    • Go 指针
    • Go 中的 GC 演变是怎样的?
    • Go 的堆和栈
  • 面向对象
    • make 和 new 的区别
    • new(T) 和 &T{} 有什么区别?
  • 并发编程
    • Channel
    • Go语言 CSP 并发模型
    • GMP 模型原理
      • GMP 模型为什么要有 P ?
    • Go 协程池(goroutine pool)
    • Go语言常见的并发模式
    • Go并发实践:主动停止goroutine
  • 最佳实践
    • 发布Go语言模块
  • 软件包
    • 常用的GoLang包工具
    • Go的UUID生成
    • 现代化的命令行框架Cobra
    • 配置解析神器Viper
    • Go发送邮件gomail
    • Go反射框架Fx
    • NSQ消息队列的使用
    • Go爬虫框架colly
    • grpc-go 的安装和使用
Powered by GitBook
On this page

Was this helpful?

  1. 并发编程

Go语言常见的并发模式

  1. 基于goroutine和channel的消息传递模式:

    • 生产者-消费者模式:使用一个goroutine生产数据,并将它们发送到一个channel中,然后其他goroutine从该channel接收并处理数据。

    • 扇出模式:一个goroutine发送数据到多个channel,每个channel由不同的goroutine接收和处理数据。

    • 扇入模式:多个goroutine发送数据到一个channel,一个单独的goroutine接收并处理所有的数据。

  2. 使用sync包实现的互斥锁模式:

    • 互斥锁(Mutex):通过Lock()和Unlock()方法实现对共享资源的互斥访问,确保同一时间只有一个goroutine可以访问共享资源。

    • 读写锁(RWMutex):允许多个goroutine同时读取共享资源,但只能有一个goroutine进行写操作。

  3. 使用atomic包提供的原子操作模式:

    • 原子操作:通过原子操作函数(如AddInt64()、SwapUint32()等)实现对共享变量的原子操作,避免竞态条件。

  4. 使用WaitGroup实现的等待组模式:

    • 等待组(WaitGroup):用于等待一组goroutine完成任务,主goroutine可以通过调用Wait()方法来等待所有任务完成。

  5. 使用select语句实现的多路复用模式:

    • 多路复用:使用select语句监听多个channel,一旦其中一个channel有数据可读或可写,就会执行相应的操作。

  6. 使用context包实现的上下文模式:

    • 上下文(Context):用于在goroutine之间传递取消信号、超时控制以及共享数据等上下文信息。

这些是常见的Go并发模式的总结,它们都能帮助你充分利用Go语言的并发特性。根据具体的场景和需求,选择合适的并发模式可以提高程序的性能和可维护性。

PreviousGo 协程池(goroutine pool)NextGo并发实践:主动停止goroutine

Last updated 1 year ago

Was this helpful?