Go goroutine ,协程

在Go语言中goroutine是一个协程,但是跟Python里面的协程有很大的不同:

  1. 在任何函数前只需要加上go关键字就可以定义为协程;
  2. 不需要在定义时区分是否是异步函数 VS async def;
  3. 调度器在适合的点自动进行切换 VS python 手动切换;
  4. 使用 go run -race 来检测数据访问的冲突;
  5. 非抢占式;

goroutine可能的切换点:

  1. I/O (输入/输出), Select
  2. Channel
  3. 等待锁
  4. 函数调用
  5. runtime.Gosched()