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++;
    }
}

3个回答

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

cichaqiu4015
cichaqiu4015 回复cichaqiu4015: 抱歉,打错了,时间是接近0.3秒
3 年多之前 回复
cichaqiu4015
cichaqiu4015 原来是这样,谢谢您的解答。我能再问您一下吗,我现在要编写的算法需要循环八千多次,总得运行时间接近三秒,请问多线程的方法不可行,是否还有别的方法来提高它的计算速度?
3 年多之前 回复

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

cichaqiu4015
cichaqiu4015 谢谢您的解答,果然增加了两个数量级就有效果了!谢谢!请问,我要编写的算法没有那么大的数量级,还有别的办法可以加快它的运算速度吗?
3 年多之前 回复

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

cichaqiu4015
cichaqiu4015 非常感谢您的评论。后来测试了一下确实这个方法不合适。
3 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问