为了账号安全,请及时绑定邮箱和手机立即绑定

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

标签:
Go

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

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

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消