Goroutines
2 min
go的协程
1. 概念辨析
1.1 进程/线程/协程
Goroutine是Go语言中的一种轻量级线程(就是协程),由Go运行时管理。
线程调度是在内核态
协程调度是用户态
所以goroutine比java线程调度开销更小
与操作系统级别的线程相比,goroutine的创建和销毁成本非常低,调度效率高,可以在同一个OS线程上多路复用多个goroutine,从而实现高并发。

- 相比于进程间通信,go的协程间通信有自己独有的方法 ^1
1.2 goroutine的特点
轻量级:Goroutine使用非常少的内存和资源,初始栈大小仅为几KB,且会根据需要动态增长。
由Go运行时调度:Go运行时负责goroutine的调度,这种调度方式被称为GMP模型(Goroutine、OS线程、调度器)。
易于创建:创建一个goroutine非常简单,只需要在函数调用前加上
go关键字。go func() { fmt.Println("Hello from Goroutine") }()