我正在尝试实现一个多线程3D应用程序,其中一个线程执行恒定速率场景更新(120Hz),另一个执行渲染(可能具有非常短的帧时间,例如400Hz),共享数据三重缓冲。根据时间QueryPerformanceCounter
MSDN article,多线程使用时表现不佳:
计算多个线程上的时序 - 例如,每个线程与特定处理器相关联 - 大大降低了多核系统的性能。
然而,更新线程需要高精度计时以确保以正确的间隔进行更新,并且在渲染线程上为了获得精确的插值帧时间,那么解决此问题的常用方法是什么? / p>
更新
我现在已经创建了一个小型测试程序来测试性能的“大幅降低”。它计算一次调用QueryPerformanceCounter
100000000次。它为一个线程执行此操作,然后在单独的核心上并行运行两个线程。根据文章的建议,每个线程都将其亲和性设置为不同的核心。如果你按照文章的说法,我的机器上的测试结果是令人惊讶的。
结果:
注意:这些结果包括增加循环计数器(64位int)和跳转到循环开始所花费的时间,因此实际执行时间更短。
1 Thread: Execution in 3255313449 ns Approximately 32.6 ns per call 2 Threads: Thread 1: Execution in 3278105881 ns Approximately 32.8 ns per call Thread 2: Execution in 3271422015 ns Approximately 32.7 ns per call
这显示使用两个线程调用QueryPerformanceCounter
对性能没有显着影响。这种异常行为,或者大多数现代机器的文章都不正确吗?