zoukankan      html  css  js  c++  java
  • unity多线程

    1.如果同时你要处理很多事情或者与Unity的对象互动小可以用thread,否则使用coroutine.

    2.Unity编程时,总有个主线程执行你的代码,也可以创建额外的线程和主线程同时运行,而Unity中你仅能从主线程中访问Unity的组件,对象和Unity系统调用,任何企图访问这些项目的第二个线程都将失败并引发错误,这是一个要重视的限制,要确保一次只有一个线程来修改变量。

    3.而提到多线程就要提到 Unity 非常常用的协程,然而协程并非真正的多线程。协程其实是等某个操作完成之后再执行后面的代码,或者说是控制代码在特定的时机执行。而多线程在 Unity 渲染和复杂逻辑运算时可以高效的使用多核 CPU,帮助程序可以更高效的运行。通常可以将需要大量计算的算法内容,放置到多线程中执行,包括逻辑框架也可以放到多线程中执行。
    4.适用于:
    (1) 大量耗时的数据计算
    (2) 网络请求
    (3) 复杂密集的I/O操作
    注意:

    • 变量都是共享的(都能指向相同的内存地址)
    • UnityEngine 的 API 不能在分线程运行
    • UnityEngine 定义的基本结构(int, float, struct 定义的数据类型)可以在分线程计算,如 Vector3(struct)可以, 但 Texture2d(class,根父类为 Object) 不可以。
    • UnityEngine 定义的基本类型的函数可以在分线程运行
    5.时间切片
    时间切片的核心思想是:如果任务不能在50毫秒内执行完,那么为了不阻塞主线程,这个任务应该让出主线程的控制权,使浏览器可以处理其他任务。让出控制权意味着停止执行当前任务,让浏览器去执行其他任务,随后再回来继续执行没有执行完的任务。

    所以时间切片的目的是不阻塞主线程,而实现目的的技术手段是将一个长任务拆分成很多个不超过50ms的小任务分散在宏任务队列中执行。

  • 相关阅读:
    牛客网 剑指Offer JZ19 顺时针打印矩阵
    牛客网 剑指Offer Z18 二叉树的镜像
    牛客网 剑指Offer JZ17 树的子结构
    一键安装脚本(MySQL双主、EMQX集群、FastDFS集群)
    API和拦截器相关的设计简记
    C# 获取今天,昨天,上周,下周,上月,下月等等一些日期格式
    Element.scrollIntoView()
    自主学习(1)--matlab
    四则运算java
    学习计划
  • 原文地址:https://www.cnblogs.com/mcyushao/p/11385002.html
Copyright © 2011-2022 走看看