首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >c++:简单的多线程示例,速度不比单线程快。

c++:简单的多线程示例,速度不比单线程快。
EN

Stack Overflow用户
提问于 2017-06-11 11:05:09
回答 1查看 1.7K关注 0票数 2

我用C++编写了一个非常简单的多线程示例。为什么多线程和单线程具有近似相同的执行时间?

代码:

代码语言:javascript
运行
复制
#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;

}

对我来说,程序的输出是

代码语言:javascript
运行
复制
time single-threading: 0.755919 sec 
time multi-threading:  0.746857 sec

我将代码编译为

代码语言:javascript
运行
复制
g++ cpp_tasksize.cpp -std=c++0x -pthread

我在一台24核linux机器上运行。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-11 11:16:16

clock()测量处理器时间,即进程在cpu上花费的时间。在多线程程序中,它会将每个线程花费在cpu上的时间加起来。据报告,单线程和多线程实现的运行时间大致相同,因为它们的总体计算数量是相同的。

你需要的是测量挂钟时间。当您要测量挂钟时间时,请使用chrono库。

代码语言:javascript
运行
复制
#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";
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44483115

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档