我做了一個小程序來觀察使用兩個線程的速度。我正在計算填充數組的過程。主線程和線程1調用函數1來解除數組的不同部分。我期望通過使用兩個線程來看到更快的結果。相反,我得到的時間更慢,註釋掉的代碼執行速度更快。我在哪裏錯了?C++線程性能
#include <chrono>
#include <iostream>
#include <vector>
#include <thread>
void function_1(int I, int J, int *B){
for (int i = I; i<(J+1); i++) {
B[i] = 100;
//std::cout << B[i] << std::endl;
}
}
int *count;
int main(int argc, const char * argv[])
{
count = new int[20000];
std::chrono::steady_clock::time_point t1 = std::chrono::steady_clock::now();
//function_1(0, 19999, count);
std::thread thread1(function_1, 0, 9999, count);
thread1.join();
function_1(10000, 19999, count);
std::chrono::steady_clock::time_point t2 = std::chrono::steady_clock::now();
auto time_span = std::chrono::duration_cast<std::chrono::microseconds>(t2 - t1).count();
std::cout << "time taken is :" <<time_span << " ms"<<std::endl;
return 0;
}
我搬到了主的號召,function_1後thread1.join()。由於某些原因,使用兩個線程的速度仍然比使用帶有註釋代碼的一個線程慢。 – gumby
測試看起來有點過分。線程管理很可能會對您的性能產生負面影響。線程並不是真正的免費並行運行方式。 – 2014-01-25 01:46:34
@Mario:這真的是一小部分工作。您可以嘗試將陣列放大10倍或100倍。 – Blastfurnace