zoukankan      html  css  js  c++  java
  • 协同函数与异步加载的功能

    coroutine

    协程的基本概念和设计目的:

    1.游戏开发中会遇到:并行逻辑:如同时加载多个资源

                                       需要多帧执行的延续性逻辑:如寻路到某一点

                                       同步这些并行和延续性逻辑:如现寻路到某一点,说一句话,在寻路到某一点

    2.目的:轻型的并行概念

                  可以同步并行逻辑

                  避免多线程带来的逻辑麻烦

    3.概念:假的多线程概念

                  可以在某些点同步

                  可以对复杂逻辑分帧,可以在主线程内非阻塞的运行一个持续性逻辑

    4.举个例子:写iemurator

                         startcoroutine

                         要由mono发起

    协程的实现原理

    它会把复杂的操作分摊到每一帧的缓慢执行,不至于阻塞主线程,类似于Update操作,就是在主线程中不断的Update

    协程就是C#迭代器,就是定义一个协程函数,返回值只能是ienumerator,不能有其他返回值,可以传参数,参数不能有out和ref类型,使用yield返回结束当前帧,但是会记住当前执行的点到下一帧继续执行,通过startCoroutine开启协程。

    C#迭代器:将一段逻辑分解到迭代器中

    是另一个Update(),在每个Update中执行一次迭代器,看一下mono的生命周期

    每次yield都会离开本次执行,迭代器会记住这个位置和上下文,下一次Update到这个协程从上次离开的位置开始执行

    coroutine和多线程

    coroutine不是多线程

    coroutine是在主线程内每帧Update,假的并行,还是在一个主线程内做的事情,只不过是不同帧

    因为不是多线程所以不用考虑变量的访问时序

    协程的几种coroutine操作

     

     协程的执行效率和时机

    实际应用:定时器

        

     实际应用:将复杂操作分帧-生成一张贴图的灰度版本

     

  • 相关阅读:
    多表代换密码
    仿射变换
    LeetCode实战练习题目
    13.线性同余方程 扩展欧几里得算法
    12.扩展欧几里得算法
    11.快速幂求逆元
    10.快速幂
    9.筛法求欧拉函数
    8.欧拉函数
    7.最大公约数 欧几里得算法,也叫辗转相除法
  • 原文地址:https://www.cnblogs.com/myHouse-222/p/8998516.html
Copyright © 2011-2022 走看看