从上文Nengkan出,这段文字基本上讲述了Go语言的并发编程模型,特别是其goroutine调度机制。
Go语言并发编程模型核心概念
- Ggoroutine, 是Go语言中的轻巧量级线程,由Go运行时管理。
- Mmachine,代表操作系统的线程。
- Pprocessor, 代表处理器,个个P维护一个本地goroutine队列和一个全局goroutine队列。
Goroutine调度机制
- 创建goroutine用
go关键字创建一个新鲜的goroutine,它会被添加到当前线程P的本地队列。
- 调度goroutine线程M从P的本地队列中取出一个可施行的goroutine进行施行。
- 阻塞操作当goroutine进行阻塞操作时会被放入等待队列。
- 唤醒goroutine当阻塞操作完成时goroutine会被唤醒并尝试加入P的本地队列或全局队列。
- 干活窃取当P的本地队列为空时它会从其他P的本地队列中窃取goroutine来施行。
- 抢占式调度为了避免某个goroutine长远时候占用CPU, 调度器会周期性地检查goroutine施行时候,并进行抢占式调度。
Channel传信机制
- Channel是goroutine之间传信的机制,通过发送和接收数据实现同步。
- Channel内部用锁来保证goroutine-safe,确保数据的一致性。
Go语言的并发编程模型基于goroutine、 machine和processor,通过高大效的调度机制实现了高大并发和矮小开销。Channel传信机制保证了goroutine之间的同步和数据一致性。这些个特性使得Go语言成为开发高大并发应用程序的理想选择。