首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实时游戏引擎是如何在Windows上工作的?

实时游戏引擎是如何在Windows上工作的?
EN

Stack Overflow用户
提问于 2021-05-20 21:32:22
回答 1查看 154关注 0票数 1

我来自一个嵌入式背景,在那里,硬实时被相当严肃地对待。对我来说,实时(快速)在Linux上是很棘手的,在Windows上也很可笑,喷气式电子游戏似乎做得很好。

显然,由于它只是软实时,频率是相对较低的60+赫兹,简单的解决方案是尽快渲染和希望最好。但是,是否有任何先进的技术可以进一步提高Windows上的响应能力?

一些具体问题:

  1. 有什么办法在不利时刻抢占窗口吗?当多个核在做其他事情时,你如何分享它们的工作呢?
  2. Windows中的IO-延迟是确定性的吗?您是否应该向调度程序施压,让其尽快切换上下文?
  3. 像最早的截止日期优先/速率单调调度(或其他)这样的调度技术有多普遍?(当然,在现有的基础上构建)

欢迎任何有洞察力的人!

编辑:

我查阅了一些资源,并补充了我的结论:

  1. 问:当时间临界计算被抢占时会发生什么?
代码语言:javascript
复制
A: The thread should have higher priority so pre-emption is rare, and when it happens, the interruption should be brief (short interrupts or IO-operations).

Windows具有将线程移动到其他内核的能力,建议将它们保持锁定( ->线程亲和力)。

  1. 问:IO-操作应该比呈现循环具有更高的优先级吗?
代码语言:javascript
复制
A: Yes, Naughty Dog's engine gives IO-operation higher priority.
  1. 问:使用什么样的日程安排?
代码语言:javascript
复制
A: In the presentation, a job system is used (similar to reactive programming).

它使用了三个非先发制人的优先级。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-22 04:08:20

如果你还没有读过现代操作系统,我建议你读一下博士安德鲁·塔南鲍姆( Andrew )。他的书还有Unix和Windows体系结构。

最主要的一点是:游戏编程与嵌入式编程不同。

我曾经使用过Windows和Android (类似Unix)。不仅Windows,而且Android也很难渲染,也很难实时实现。我们减少CPU的技巧之一,GPU延迟是使用更低的特性驱动程序支持视觉效果(这意味着如果硬件不支持这个新的图形API,我们将使用旧的API,这将使对象更少的形状和更少的美丽),或者如果设备不支持的功能和效果是不重要的,只需删除该设备的这一效果。它将推动FPS (帧每秒)更好。

游戏引擎也是许多图形API的区别,使用Vulkan或DX12 (视窗)或金属(苹果设备)是制造更多的FPS,但需要更新的硬件,因为它们是低水平的API。它将给您提供更好的性能,比OpenGL或DX11更漂亮,但是旧API在旧设备上是支持的。

3你们的问题,我要用我的知识回答(也许别人有更好的答案):

  1. 我还有一个小问题:为什么不使用threadatomicmutex C++ 11 API与多核CPU共享任务?它更容易线程编程,跨平台,不需要安排任何事情. Windows具有经典的Win32线程API SetThreadPriority,用于设置线程的相对优先级。此API不推荐用于Windows运行时 ( Microsoft 8及更高版本的现代Windows概念),后者建议使用线程池概念 (使用现代API将自动化多核并行任务,这比手动配置使用经典API更好)。 在游戏引擎中,有“淘气狗”中的基督教回转 talking概念并行,来自Roblox的Sergey实现了开源TaskScheduler,这个概念基于Win32 API和Win32 API。Ubisoft公司的杰夫·普林也有一个演讲使用C++ 11。
  2. 你说IO延迟是什么意思?键盘鼠标还是磁盘IO?如果你把你的问题编辑得更清楚,我会编辑答案。
  3. 在Windows上,我找不到一个文档或类似的最早截止日期优先/速率单调调度。可能是由于Microsoft阻止内核模式调度而限制了这一点。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67628200

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档