go语言生态学习
第五天:go多协程开发学习
文章目录
前言
go以协程实现了并发操作,协程又叫goroutine,是一个比线程更小的运行单位,只在用户态下运行,通信方式为channel。go项目在1.11版本之后均开始使用go mod方式管理项目模块和不同模块之间的调用。
一、协程goroutine
1.协程运行模型
如图为协程的运行模型,一个内核态线程运行占用一个处理器,当存在线程运行时,处理器忙碌。协程运行在用户态,通过协程调度处理器来决定协程运行在局部队列还是全局队列,局部队列的协程按照抢占式策略运行在一个内核态线程上,全局队列的协程在有处理器空闲或者局部协程队列有空闲时加入运行队列。因而协程和线程之间是M:N模型,一个协程可以同时运行在多个线程上,一个线程可以绑定多个协程来运行,他们之间通过一个调度处理器来形成绑定运行的关系。
2.协程使用方法
首先明确主协程和子协程的概念,只有main函数启动的协程为主协程,所有go关键字启动运行的函数为子协程,当主协程退出运行时