goroutine和coroutine的区别有哪些

这篇文章主要介绍了goroutine和coroutine的区别有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇goroutine和coroutine的区别有哪些文章都会有所收获,下面我们一起来看看吧。

我们提供的服务有:做网站、成都网站建设、微信公众号开发、网站优化、网站认证、玉树ssl等。为上千余家企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的玉树网站制作公司

区别:1、goroutine通过通道来通信,coroutine通过让出和恢复操作来通信。2、goroutine协程间不完全同步,可以利用多核并行运行;coroutine协程间完全同步,不会并行。3、goroutine可在多个协程/线程上切换;coroutine在一个线程中运行。4、应用程序长时间大量地占用CPU,goroutine中用户有权终止这个任务,coroutine不行。

C#、Lua、Python 语言都支持 coroutine 特性。coroutine 与 goroutine 在名字上类似,都可以将函数或者语句在独立的环境中运行,但是它们之间有两点不同:

  • goroutine 可能发生并行执行;

  • 但 coroutine 始终顺序执行。

goroutines 意味着并行(或者可以以并行的方式部署),coroutines 一般来说不是这样的,goroutines 通过通道来通信;coroutines 通过让出和恢复操作来通信,goroutines 比 coroutines 更强大,也很容易从 coroutines 的逻辑复用到 goroutines。

狭义地说,goroutine 可能发生在多线程环境下,goroutine 无法控制自己获取高优先度支持;coroutine 始终发生在单线程,coroutine 程序需要主动交出控制权,宿主才能获得控制权并将控制权交给其他 coroutine。

goroutine 间使用 channel 通信,coroutine 使用 yield 和 resume 操作。

goroutine 和 coroutine 的概念和运行机制都是脱胎于早期的操作系统。

coroutine 的运行机制属于协作式任务处理,早期的操作系统要求每一个应用必须遵守操作系统的任务处理规则,应用程序在不需要使用 CPU 时,会主动交出 CPU 使用权。如果开发者无意间或者故意让应用程序长时间占用 CPU,操作系统也无能为力,表现出来的效果就是计算机很容易失去响应或者死机。

goroutine 属于抢占式任务处理,已经和现有的多线程和多进程任务处理非常类似。应用程序对 CPU 的控制最终还需要由操作系统来管理,操作系统如果发现一个应用程序长时间大量地占用 CPU,那么用户有权终止这个任务。

coroutine和goroutine的区别总结

区别一:

  • goroutine 通过通道来通信;

  • coroutine通过让出和恢复操作来通信

区别二:

  • goroutine协程间不完全同步,可以利用多核并行运行,具体要看channel的设计;

  • coroutine协程间完全同步,不会并行

区别三:

  • goroutine可以在多个协程在多个线程上切换,既可以用到多核,又可以减少切换开销。

  • coroutine只在一个线程中运行,只在一个线程中运行

区别四:

  • goroutine操作系统如果发现一个应用程序长时间大量地占用 CPU,那么用户有权终止这个任务。

  • coroutine如果开发者无意间或者故意让应用程序长时间占用 CPU,操作系统也无能为力,表现出来的效果就是计算机很容易失去响应或者死机。

关于“goroutine和coroutine的区别有哪些”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“goroutine和coroutine的区别有哪些”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注创新互联行业资讯频道。


文章标题:goroutine和coroutine的区别有哪些
文章URL:http://myzitong.com/article/igopgd.html