Windows平台Sleep(0), YieldProcessor()性能测试

测试环境:

windows 10, Inter i7 7700K

测试标准:

for循环进行1亿次的Sleep(0)及YieldProcessor()

代码:

const int TEST_COUNT = 100000000;
void DoSleepTest()
{
    DWORD beginTestTime = GetTickCount();
    for (int i = 0; i < TEST_COUNT; i++)
        Sleep(0);

    DWORD usedTime = GetTickCount() - beginTestTime;
    printf("End sleep test, test times:%d, usedTime:%d\n", TEST_COUNT, usedTime);
}

void DoCPURelaxTest(bool useAsm)
{
    DWORD beginTestTime = GetTickCount();
    for (int i = 0; i < TEST_COUNT; i++)
    {
        if (useAsm)
        {
            __asm {
                rep nop
            }
        }
        else
        {
            YieldProcessor();
        }
    }

    DWORD usedTime = GetTickCount() - beginTestTime;
    printf("End cpu-relax test(use asm:%s), test times:%d, usedTime:%d\n", useAsm ? "true" : "false", TEST_COUNT, usedTime);
}

int main(int argc, char *argv[])
{
    DoSleepTest();
    DoCPURelaxTest(true);
    DoCPURelaxTest(false);

    getchar();
    return 0;
}

测试结果:

测试结果
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,860评论 18 139
  • 黑盒测试案例设计技术篇 1 概述 本章介绍黑盒测试的概念和进行黑盒测试的目的与意义,及关于等价类划分、边界值分析、...
    西边人阅读 17,047评论 0 41
  • 【1】 Connor Randall: Profiling the academy full-back in Ju...
    十年一刻_YNWA阅读 409评论 0 1
  • 目目666阅读 195评论 1 0
  • 小镇,今天的蓝天很美,有点想家,也有点想你。镇的阳光很暖,石板上晒着大蒜,猫舔着毛,一切如旧。
    老60阅读 208评论 0 0