- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
简而言之:
在什么情况下在单核上运行多线程应用程序会破坏性能?
将多线程应用程序的关联设置为仅使用一个核心怎么样?
长:
我试图在它自己的线程上运行 2D 引擎的物理。它有效,起初性能似乎正常,但我决定让游戏尝试以 10K FPS 运行,物理以 120FPS 运行,进入任务管理器并将关联设置为程序只能使用一个核心的位置。
在将亲和性设置为一个核心之前,FPS 为 ~1700,之后变为 ~70FPS。没想到会有这么大的下降。我告诉游戏尝试以 300 FPS 和 60FPS 的物理速度运行。
同样的事情发生了。
我没有多想,就继续修改引擎。后来我改了一些绘图代码后再次测试,物理300 FPS,60FPS。所有内核都允许它管理 300FPS 就好了,与单核 FPS 的亲和力下降到 4。现在我知道在单核上运行多线程应用程序不可能那么糟糕,或者我不知道什么时候会发生您将亲和力设置为单个核心。
这是关于渲染/物理如何运行......
循环开始
收集输入直到 (1.0/FPS) 过去。
调用更新。
锁定物理线程互斥锁,因为游戏中的内容将使用物理数据,并且在此更新调用中的所有内容完成之前,我不希望引擎更新任何内容。
更新游戏中可能将 Draw 函数对象(保存要绘制的内容、绘制的位置、如何绘制)发送到渲染队列的所有内容。
解锁互斥锁。
渲染器对每个函数对象调用 operator() 并将它们从队列中删除。
更新画面。
重复循环。
物理线程循环:
ALLEGRO_TIMER* timer(al_create_timer(1.0f / 60.0f));
double prevCount(0);
al_start_timer(timer);
while(true)
{
auto_mutex lock(m_mutex);
if(m_shutdown)
break;
if (!m_allowedToStep)
continue;
// Don't run too fast. This isn't final, just simple test code.
if (!(al_get_timer_count(timer) > prevCount))
continue;
prevCount = al_get_timer_count(timer);
m_world->Step(1.0f / 60.0f, 10, 10);
m_world->ClearForces();
}
最佳答案
Under what scenarios can running a multithreaded app on a single core destroy performance?
What about setting the affinity of a multithreaded app to only use one core?
if (!(al_get_timer_count(timer) > prevCount))
continue;
运行循环!
Sleep()
.
关于multithreading - 通过设置亲和性在单核上运行多线程程序的性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7533415/
我是一名优秀的程序员,十分优秀!