一个线程可以包含多个进程计算机系统资源分配最⼩单位,线程和进程的区别是什么?1、进程是资源分配最⼩单位,线程是程...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
从字⾯上看,协程与线程、进程较为相似,对于拥有其它开发语⾔基础的同学容易造成困扰,以⾄于第⼀印象把协程理解成线程。
线程是操作系统能够进⾏运算调度的最⼩单位,分配算⼒、执⾏调度以线程为单位。⼀条线程指就是⼀个单⼀顺序的控制流。
进程是正在运⾏的程序的实例,是线程集合的载体,同时也是操作系统分配资源的基本单位。
线程和进程的关系,打个⽐⽅,⼀个应⽤程序就是⼀个进程。进程启动后,好⽐建⽴了⼀个⼯⼚,线程是这个⼯⼚中的“流⽔线”。⼀个⼯⼚内可以有多个流⽔线,这些流⽔线可以并发⽣产,⼀条流⽔线出问题不会影响其它流⽔线。所以,进程可以有多个线程,但⾄少有⼀个主线程。
线程间可以并发执⾏,并共享进程资源(都使⽤进程的空间)。线程间有独⽴的栈区,但共享使⽤进程的堆区。
Unity中不⽀持多线程开发,但是却有并发的需求,使⽤协程来模拟多线程开发,即可并发(模拟),⼜可控制同步、防⽌阻塞。
协程是Unity机制,不具备系统普遍性,只能在MonoBehaviour下启动。 协程和线程的定义、启动流程类似,但其内部实现原理与线程不同。
------------------这⾥开始介绍协程-----------------------------
Unity的协程系统是基于C#的⼀个简单⽽强⼤的接⼝,简单讲就是可以把⼀个⽅法拆分成多次执⾏的⼀种接⼝。协程通过yiled return返回⼀个迭代器,记录程序执⾏的位置,之后进⼊阻塞状态,直到满⾜唤醒条件后,才会继续向下执⾏。启动多个协程后,多个协程之间不会真正的并发,⽽通过快速轮询模拟并发效果。
Unity在整个⽣命周期中构建了⼀个托管代码执⾏队列,通过⽣命周期管理器往这个队列中添加执⾏⽅法的委托,然后启动⼀个托管线程,这个线程中不断的循环获取队列中的⽅法委托并执⾏。
当开启⼀个迭代器(IEnumerator)后,协同程序便开始执⾏,在执⾏到yield return 之前和⼀般的程序没有任何区别,遇到yield return 之后⽴即返回,并将之后的代码挂起。之后判断yield return后边的条件是否满⾜,如果满⾜,向下继续执⾏,否则继续等待。
IEnumerator methodName(Object parameter1,Object parameter2,...){
// to do something
yield return Yield Instruction/other/null;
// to do something else
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论