继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

【九月打卡】第8天 go语言Goroutine

洋溢1310659
关注TA
已关注
手记 26
粉丝 2
获赞 4

课程名称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函数也是一个协程
  • 子程序是协程的一个特例(所有函数调用都是子程序)

课程收获

  1. main退出,所有协程将被杀掉。
  2. main函数也是一个协程。
  3. go语言协程可看成编译器层面的多任务处理。
  4. 线程就是抢占式多任务处理,执行到一半可能会被操作系统调度去执行其它任务(被动终止任务),需要保存本次任务的上下文信息。
  5. 不管开多少个协程,go调度器会更加系统的核数去控制活动的线程数,一般不超过系统核数的活动线程

图片描述
图片描述
图片描述

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP