一点疑问
相比大家在投简历、面试等等过程中,或多或少会遇到这么一个问题:熟悉掌握多线程开发;谈谈你对多线程的认识。
其实,我有这么一个疑问,那就是多线程真的有必要么?根据我这两年来的项目经验,也或多或少用了一些多线程的东西,其中有的失败了,有的成功了。但是根据我的所知,有很多程序虽然计算规模很大,实际上却没有使用多线程,但是速度依然很快。有很多程序就算用了多线程,也不见得快了多少。
那么,多线程真的有必要么?
一个例子
由于我对多线程的了解也是非常浅薄,不敢断言说“必要”或者“不必要”。由于暂定学习多线程定在第三季度或者第四季度,所以仅发表一些个人的观点。
曾经看过这么一段代码,从中来浅析一下一个程序性能瓶颈是否在于“多线程”。例子如下:
int main(void)
{
const size_t arraySize = 30000;
int data[arraySize];
for (size_t c = 0; c < arraySize; ++c)
{
data[c] = std::rand() % 256;
}
clock_t start = clock();
long long sum = 0;
for (size_t i = 0; i < 100000; ++i)
{
for (size_t c = 0; c < arraySize; ++c)
{
if (data[c] >= 128)
{
sum += data[c];
}
}
}
double elapsedTime = static_cast<double>(clock() - start) /CLOCKS_PER_SEC;
std::cout << elapsedTime << std::endl;
std::cout << "sum = " << sum << std::endl;
return 0;
}
考虑这个程序,简单说就是从3万个随机数中找到大于等于128的进行累加,这个过程循环10万次,在Visual Studio 2013,Win32平台Release下执行时间为:17s。
那么可以进行优化么?乍看起来,好像无从下手,这么简单的代码还需要进行优化吗?
第一种优化
既然提到了优化,那么必然会有方法了;既然这里提到第一种优化,那么必然会有第二种方法了。
先上代码,代