作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我用 C++ 编写了一个非常简单的多线程示例。为什么多线程和单线程的执行时间几乎相同?
代码:
#include <iostream>
#include <thread>
#include <ctime>
using namespace std;
// function adds up all number up to given number
void task(int number)
{
int s = 0;
for(int i=0; i<number; i++){
s = s + i;
}
}
int main()
{
int n = 100000000;
////////////////////////////
// single processing //
////////////////////////////
clock_t begin = clock();
task(n);
task(n);
task(n);
task(n);
clock_t end = clock();
double elapsed_secs = double(end - begin) / CLOCKS_PER_SEC;
cout << "time single-threading: "<< elapsed_secs << " sec" << endl;
////////////////////////////
// multiprocessing //
////////////////////////////
begin = clock();
thread t1 = thread(task, n);
thread t2 = thread(task, n);
thread t3 = thread(task, n);
thread t4 = thread(task, n);
t1.join();
t2.join();
t3.join();
t4.join();
end = clock();
elapsed_secs = double(end - begin) / CLOCKS_PER_SEC;
cout << "time multi-threading: " << elapsed_secs << " sec" << endl;
}
对我来说程序的输出是
time single-threading: 0.755919 sec
time multi-threading: 0.746857 sec
我编译我的代码
g++ cpp_tasksize.cpp -std=c++0x -pthread
我在 24 核 linux 机器上运行
最佳答案
clock()
测量处理器时间,即您的进程花费在 cpu 上的时间。在多线程程序中,它会增加每个线程在您的 cpu 上花费的时间。据报告,您的单线程和多线程实现需要大约相同的时间来运行,因为它们总体上执行相同数量的计算。
您需要测量挂钟时间。如果您想测量挂钟时间,请使用 chrono
库。
#include <chrono>
int main ()
{
auto start = std::chrono::high_resolution_clock::now();
// code section
auto end = std::chrono::high_resolution_clock::now();
std::cout << std::chrono::duration<double, std::milli>(end - start).count() << " ms\n";
}
关于c++:简单的多线程示例不比单线程快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44483115/
我是一名优秀的程序员,十分优秀!