协程有哪些好处?

从字面上看,协程与线程、进程较为相似,对于拥有其它开发语言基础的同学容易造成困扰,以至于第一印象把协程理解成线程。线程是操作系统能够进行运算调度的最小单位,分配算力、执行调度以线程为单位。一条线程指就是一个单一顺序的控制流。进程是正在运行的程序的实例,是线程集合的载体,同时也是操作系统分配资源的基本单位。

线程和进程的关系,打个比方,一个应用程序就是一个进程。进程启动后,好比建立了一个工厂,线程是这个工厂中的“流水线”。一个工厂内可以有多个流水线,这些流水线可以并发生产,一条流水线出问题不会影响其它流水线。所以,进程可以有多个线程,但至少有一个主线程。线程间可以并发执行,并共享进程资源(都使用进程的空间)。

线程间有独立的栈区,但共享使用进程的堆区。Unity中不支持多线程开发,但是却有并发的需求,使用协程来模拟多线程开发,即可并发(模拟),又可控制同步、防止阻塞。协程是Unity机制,不具备系统普遍性,只能在MonoBehaviour下启动。 协程和线程的定义、启动流程类似,但其内部实现原理与线程不同。

------------------这里开始介绍协程-----------------------------Unity的协程系统是基于C#的一个简单而强大的接口,简单讲就是可以把一个方法拆分成多次执行的一种接口。协程通过yiled return返回一个迭代器,记录程序执行的位置,之后进入阻塞状态,直到满足唤醒条件后,才会继续向下执行。

启动多个协程后,多个协程之间不会真正的并发,而通过快速轮询模拟并发效果。Unity在整个生命周期中构建了一个托管代码执行队列,通过生命周期管理器往这个队列中添加执行方法的委托,然后启动一个托管线程,这个线程中不断的循环获取队列中的方法委托并执行。当开启一个迭代器(IEnumerator)后,协同程序便开始执行,在执行到yield return 之前和一般的程序没有任何区别,遇到yield return 之后立即返回,并将之后的代码挂起。

之后判断yield return后边的条件是否满足,如果满足,向下继续执行,否则继续等待。IEnumerator methodName(Object parameter1,Object parameter2,...){// to do somethingyield return Yield Instruction/other/null;// to do something else}。

国外都有哪些php协程框架?

mezzio 即能用 phpfpm,也能配合swoole, (mezzio-swoole)中间件什么的都是基于PSR7,15. php-fpm能用的,swoole也能用。其它组件也一样。数据库可以用 doctrine 缓存实现psr6,16很多http客户端:guzzle,psr18ioc : psr3, mezzio提供自由性的选择整体mezzio提供选择性的组件组合,设计都遵循依赖倒置原则,无状态对象设计。


文章TAG:协程  官方网站  雪峰  
下一篇