type
status
date
slug
summary
tags
category
icon
password
Goroutine
Goroutine 是 Go 语言中的轻量级线程,可以理解为一种超高效的“多任务处理单元”。它的核心特点:
- 轻量:初始栈仅 2KB(传统线程需 1MB 以上) 就像你可以在一个笔记本上同时处理多项任务,而不需要为每个任务单独准备一个办公室。
- 高效调度:Go 运行时自动管理调度,类似“智能管家”自动分配任务给 CPU 核心
- 非阻塞:一个 Goroutine 阻塞时(如等待 I/O),其他任务继续运行,如同你在等咖啡机时可以先处理邮件
生活例子:假设你在咖啡馆一边喝咖啡(主任务),一边处理邮件(Goroutine 1)、听音乐(Goroutine 2),这就是并发;若你有两个服务员同时处理多个订单,则是并行.
- 轻量级:启动百万级 Goroutine 只需几 MB 内存
- 通信方式:
- Channel:像传送带,协程间传递数据(如订单、零件)
- sync.WaitGroup:像任务计数器,等待所有协程完成
- 调度模型:GMP(Goroutine-Machine-Processor)自动分配任务到 CPU 核心
examples:
1.快递分拣
场景:快递仓库有多个分拣员(Goroutine)同时分拣包裹,经理(主线程)等待所有人完成工作。
2.场景
顾客下单(生产者协程),咖啡师制作(消费者协程),通过通道传递订单
3.厨师烹饪
场景:主厨(主线程)启动多个协程处理任务,5秒后通知所有协程停止。