Unity协同函数简介

2020-09-24  本文已影响0人  漫游之光

协程的概念

协程又可以称为用户线程,微线程,可以将其理解为单个进程或线程中的多个用户态线程,这些微线程在用户态进程控制和调度。

进程,线程以及协程的设计都是为了并发任务可以更好的利用CPU资源,他们之间最大的区别在于CPU资源的使用上:

由于我们可以在用户态调度协程任务,所以我们可以把一组相互依赖的任务设计为协程。这样,当一个协程任务完成之后,可以手动的进行任务切换,把当前任务挂起(yield),切换到另一个协程区工作.由于我们可以控制程序主动让出资源,很多情况下将不需要对资源进行加锁。

Unity中的协程

Unity中的协程提供了轻型的并行概念,可以同步并行逻辑,同时可以避免多线程带来的逻辑麻烦。

协程可以实现在某些点的同步,可以将复杂逻辑分帧,可以在主线程内非阻塞的运行一个持续性逻辑。

Unity中协程的实现借助了C#的迭代器,每次yeild都会离开本次执行,迭代器会记住这个位置和上下文,下一次update到这个协程上次离开的位置开始执行。

Unity协程的几种常用操作

Unity中的协程有以下几种常见的返回类型。

yeild return null; //等到下一帧继续执行
yeild return new WaitForSeconds(1.0f); //等待1秒后执行
yeild return StartCoroutine(); //等待另一个协程结束
yeild return WWW(); //开启异步下载

延迟执行一段代码

IEnumberator Work(){
    yeild return new WaitForSeconds(3.0f);
    //do Work
}

将复杂的操作分散到多个帧

IEnumberator Work(){
    for(int i=0;i<10000;i++){
        res += i;
        yeild return null;
    }
}

串联几个连续性的逻辑

IEnumberator Work1(){
    Debug.log("Work1");
}

IEnumberator Work2(){
    yeild rturn StartCoroutine(Work1());
    Debug.log("Work2");
}

上一篇下一篇

猜你喜欢

热点阅读