#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