课程名称:GO开发工程师
课程章节:5-1goroutine;5-2go语言的调度器
课程讲师: ccmouse
课程内容:
go routine的定义
- 关键字->go: 开协程(Coroutine),并发执行;任何函数只要加上go就能给调度器运行
- 不需要在定义时区分是否是异步函数
- 调度器会在合适的时机切换(传统的协程需要手动指定切换时机)
- go run -race *.go 检测数据访问冲突
go routine 可能的切换点
- I/O, select、channel、等待锁、函数调用(有时)、 runtime.Gosched()
- 只是参考,并不能保证在这些点切换,也不能保证在其它地方不会进行切换
go routine 特点
- 轻量级” 级线程
- 非抢占式多任务处理,由协程主动交出控制权
- 编译器、解释器、虚拟机层面的多任务处理
- 多个协程可能在一个或者多个线程上运行
- main函数也是一个协程
- 子程序是协程的一个特例(所有函数调用都是子程序)
课程收获:
- main退出,所有协程将被杀掉。
- main函数也是一个协程。
- go语言协程可看成编译器层面的多任务处理。
- 线程就是抢占式多任务处理,执行到一半可能会被操作系统调度去执行其它任务(被动终止任务),需要保存本次任务的上下文信息。
- 不管开多少个协程,go调度器会更加系统的核数去控制活动的线程数,一般不超过系统核数的活动线程
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦