手记

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

课程名称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调度器会更加系统的核数去控制活动的线程数,一般不超过系统核数的活动线程



0人推荐
随时随地看视频
慕课网APP