10.2 go语言的调度器
一、子程序
子程序是协程的一个特例
二、其他语言中的协程
C++:Boost.Coroutine
Java:不支持,第三方除外
python:
使用yield关键字实现协程
Python 3.5加入了async def对协程原生支持
三、协程
协程的定义:
任何函数只需加上go就能送给调度器运行
不需要定义时区分是否是异步函数(对比python)
调度器在合适的点进行切换
使用
-race来检测数据访问冲突
可能的切换点
I/O, select
channel
等待锁
函数调用(有事)
runtime.Gosched() 手动交出
只是参考,不能保证切换,不能保证在其他地方不切换
注意:不管你开房多少个线程,调度器会映射到你的物理机器上,使用最大核数进行调度
Last updated
Was this helpful?