zoukankan      html  css  js  c++  java
  • [UE4]UE4是单线程的吗?

    并行与串行

      并行是同时在执行,串行是一个接一个地执行

    进程与线程

      笼统的说,进程是游戏的一次运行,线程是进程里面分配CPU资源的最小单位

    类比

      1、把世界看成一台计算机

      2、世界里面的人可以看成是一个一个的进程

      3、一个人可以分心做很多事情:一边走路一边看手机、一边吃饭一边看电视、一边听歌一边学习

      4、进程跟人一样,生命只有一次

    大部分游戏,都是单线程的

      为什么会这样呢?

      一方面,单线程写起来比较容易理解;另一方面,它比较符合计算机最开始的架构,最开始的CPU都是单线程的,一条指令一条指令执行。

    单线程程序只能利用多核CPU中的一个核

      

    单线程改成多线程的阻力

      1、应用场景不一定适合:瓶颈不在CPU,而是在其他(比如显卡)

      2、多线程程序对开发人员要求比较高:能正确处理数据之间的依赖关系

      3、多线程本身是有额外开销的。

    UE4线程

      1、游戏主循环是单线程的,不会有多个线程来执行主循环(接受输入、处理游戏逻辑、渲染、Sleep),因此不在一帧里面做太多的事情,如果要做的事情太多的话,可以拆分成在多帧里面运行,就不会卡住了。

      2、设计思想上,模拟了并行(不会有真正的“同时”),游戏引擎模拟的是现实世界,现实世界是并行的,游戏引擎为了让人容易理解,因此游戏引擎模拟了并行,采用的办法就是每个Actor都有自己的Beginplay和tick事件。在游戏主循环的“处理游戏逻辑”里面,对每个Actor的Tick事件都调用一遍,这一个看起来所有的Actor看起来都是并行的。

      Tick事件是每帧都被调用一次,在60帧率游戏中,每一帧只需要17毫秒,在17毫秒要处理所有actor的Tick事件,一帧所花费的时间太短,在玩家看来就是同时执行的。但实际上并没有真正的同时调用Tick事件。

      假设你有一种超能力,啪一下就能让整个世界的时间静止,这个时候去观察正在运行的游戏,它可能正在停止某一帧上,可能正在处理某个Actor的Tick事件,请注意,这个时候只有一个Actor的Tick事件是被处理的,不会同时有2个的Actor的Tick事件被执行。

      所以说游戏引擎只是模拟了并行,但实际上不是真正的并行。

      3、编译、构建光照、运行时与显卡的交互,可能是多线程的,这个是游戏引擎自身的优化,跟游戏逻辑本身的开发是没有关系的。

      4、用户可以自己创建多线程,不过UE4蓝图并且提供这样的接口,但可以使用C++来做这样的事情,或者也可以使用别人包装好的插件来创建多线程。

  • 相关阅读:
    HDU_2010——水仙花数
    HDU_2000——ASCII码排序sort()
    HDU_2008——数值统计
    HDU_2005——今天是今年的第几天
    HDU_2004——成绩转换
    HDU_2002——计算求的体积
    InnoDB可重复读隔离级别的底层实现原理
    nginx s reload原理
    Redis主从复制原理总结
    HTTP1.0、HTTP1.1 和 HTTP2.0 的区别
  • 原文地址:https://www.cnblogs.com/timy/p/10182685.html
Copyright © 2011-2022 走看看