例如,在带有Bootcamp的Mac Mini上,Team Fortress 2在OSX中的运行速度约为20fps,在Windows中的运行速度约为80fps。这似乎很常见。为什么是这样?
例如,在带有Bootcamp的Mac Mini上,Team Fortress 2在OSX中的运行速度约为20fps,在Windows中的运行速度约为80fps。这似乎很常见。为什么是这样?
Answers:
Windows上的Direct3D驱动程序经过了荒谬的优化,有时是针对特定游戏的,由各个硬件供应商开发。
Apple的OpenGL驱动程序由Apple编写和维护(AFAIK),旨在“通用”的OS使用,包括UI和其他功能。游戏和高性能吞吐量没有太多优化。
基本上,很多从资源的大量的资源已经进入了制作的DirectX快于Windows,而多资源少做同样的Mac上。
尽管我不会轻视Microsoft可能对Windows和/或DirectX进行的优化,但我坚信大多数程序在Windows上的性能都会更好,这仅仅是因为开发人员所关注的(这就是金钱所在)。他们在考虑Windows的情况下进行设计决策,然后尝试使其在其他OS(Mac,Linux等)上运行。我经常在工作中遇到这个问题:其他项目在移植到非Windows系统时遇到了很多麻烦,因为开发人员将其视为事后考虑。我已经反复编写了可以在多个操作系统上构建的程序,而付出的努力很少,因为我从一开始就计划了这种方式。一旦您真的尝试过了(而不是事后努力地做港口工作),就可以了解它所需要的,并且几乎不需要额外的工作。
作为Mac的同行用户,我想提供一个附加因素:OS X中的CPU调度程序比Windows中的CPU调度程序更“公平”。
这是一个复杂的计算机科学主题,因此这是一种思考CPU调度程序的简单方法:处理器必须一次处理许多任务(所有打开的程序以及后台系统进程)。它实际上只能一次完成几件事(例如,内核数乘以每个内核的线程数;例如,双核i7可以一次执行4个任务)。因此,它将所有工作分解为多个部分,并在它们之间交替显示,以便看起来它实际上一次在做很多事情。当您运行两个程序时,处理器实际上只是在处理这两个程序之间来回切换,速度非常快(例如,这里几微秒,然后那里几微秒)。
事物以什么顺序执行以及持续多长时间的模式由“调度算法”决定。例如,循环调度程序只是将任务排列成一个圆圈,并按顺序处理每个任务。另一个调度程序可能会从最短到最长时间安排任务-小任务将很快完成,大任务可能需要等待一段时间才能完成。
Windows和OS X有很大的不同,它们的调度算法也有所不同。Windows在确定事物优先级方面有点“聪明”,因此它为可见程序赋予了更高的优先级,以使计算机看起来更快。但是,OS X对后台进程更为公平。两种操作系统之间的总体算法非常相似(它们都是多级反馈队列),但是这些小细节导致了不同的用户体验。
双方都有自己的优势。就像我说的那样,Windows中的可见程序将得到更快的显示,因为它们具有更高的优先级。但是,如果一个可见的程序决定承担大量精力,那么整个计算机将遭受更大的损失。OS X更公平的调度程序可实现更可预测和更稳定的速度,这对于音频和视频操作而言非常有用。例如,如果您在后台播放歌曲,则与Windows相比,同时执行其他操作时口吃的可能性较小。
因此,关键点在于:Windows中的全屏游戏将在CPU上获得较高的优先级,而在后台运行的任何内容都必须等待。在OS X中,情况并非如此。
有关调度程序的一些技术信息在这里给出; 其余的答案来自于我的计算机科学教育以及在过去10个月(偶尔使用Linux)后过去10个月中对OS X的使用情况。有时候,我对更公平的调度程序感到沮丧,但是其他时候,我欣赏它的优势。
顺便说一句,Linux有一个更加公平的调度程序实现。这就是使其成为出色服务器的原因,但我认为用户体验会下降。例如,当您的计算机陷入繁琐的任务时,您的光标将停止平稳响应,因为它的优先级与其他所有事物一样。这基本上在Windows或OS X中不会发生。