go语言学习笔记 — 并发编程 — 轻量级线程goroutine(4):go语言的协程goroutine,与普通程序的协程coroutine

拿Python程序的coroutine与Go程序的goroutine做比较,两者都可以把函数或语句运行在独立的环境,但还是有不同点:

  • goroutine可能并行执行,但coroutine始终顺序执行

狭义地说,goroutine可能发生在多线程环境下。goroutine无法控制自己获得高优先级支持;coroutine始终发生在单线程,coroutine程序需要主动交出CPU控制权,宿主操作系统才能获得控制权并重新分配给其他coroutine。

  • goroutine之间使用通道channel通信,coroutine使用yield和resume操作

coroutine的运行机制属于协作式任务处理。早期操作系统要求每个应用程序必须遵循操作系统的任务处理规则:应用程序在不需要使用CPU时,需要主动交出CPU控制权。如果开发者无意或故意使应用程序长时间占用CPU,操作系统也无能为力,最后OS很容易失去响应或死机。

goroutine的运行机制属于抢占式任务处理。这与多进程和多线程任务处理非常类似,操作系统如果发现一个应用程序长时间大量占用CPU,那么用户有权终止这个任务。

你可能感兴趣的:(Golang)