C++多线程在执行时,其运行时间比顺序执行时长很多,感觉不合理又找不出原因。请大家解答一下。谢谢。

#define _CRT_SECURE_NO_WARNINGS
#include <iostream> 
#include <iomanip> 
#include <math.h> 
#include <ctime> 
#include <thread>
#include <Windows.h>
using namespace std;

void main()
{
    double time = 0;
    double counts = 0;
    LARGE_INTEGER nFreq;
    LARGE_INTEGER nBeginTime;
    LARGE_INTEGER nEndTime;
    QueryPerformanceFrequency(&nFreq);
    QueryPerformanceCounter(&nBeginTime);//开始计时

    void collision_list_1();    //函数声明
    void collision_list_2();

    thread collision_test[2];//创建两个线程
    collision_test[0] = thread{ collision_list_1};
    collision_test[0].detach();
    collision_test[1] = thread{ collision_list_2};
    collision_test[1].detach();

    QueryPerformanceCounter(&nEndTime);//停止计时并输出
    time = (double)(nEndTime.QuadPart - nBeginTime.QuadPart) / (double)nFreq.QuadPart;
    cout << "多线程程序执行时间:" << time * 1000 << "ms" << endl;

    double time_1 = 0;
    double counts_1 = 0;
    LARGE_INTEGER nFreq_1;
    LARGE_INTEGER nBeginTime_1;
    LARGE_INTEGER nEndTime_1;
    QueryPerformanceFrequency(&nFreq_1);
    QueryPerformanceCounter(&nBeginTime_1);//开始计时

    collision_list_1();//顺序执行两个函数
    collision_list_2();

    QueryPerformanceCounter(&nEndTime_1);//停止计时并输出
    time_1 = (double)(nEndTime_1.QuadPart - nBeginTime_1.QuadPart) / (double)nFreq_1.QuadPart; 
    cout << "顺序程序执行时间:" << time_1 * 1000 << "ms" << endl;
    system("pause");
}

void collision_list_1()
{
    for (int i = 0; i < 100000;i++)
    {
        int count = 0;
        count++;
    }
}

void collision_list_2()
{
    for (int i = 0; i < 100000; i++)
    {
        int count = 0;
        count++;
    }
}

一般来说,如果没有等待其他模块的情况,多任务一定比顺序执行慢。因为要额外处理多任务切换。

循环次数太少,看不出效果,加大循环量,试试看,因为现代处理器很少有单核的,而双核的cpu运行所谓"CPU密集型"还是有提升的。

你这个函数是CPU密集型的,多线程之间还要反复上下文切换,并不能提升性能
多线程主要是利用你有各种网络IO等,当等待的时候,可以把CPU让出来做其他处理。而你的是循环不停地计算。根本没有机会让出空余的CPU