为什么我的多线程示例需要与任何一个相同的时间



我想在我的程序中创建一些线程,其中通过多个参数。我发现了这个示例,其中表明您可以避免结构并将多个参数传递给线程。有效。我以为。当我查看功能的持续时间时,它们花了相同的时间。

我正在亚马逊服务器上运行代码,因此我不确定服务器还是我的代码是否存在问题。

编辑我添加了可执行的代码,然后在本地计算机上运行它。它似乎没有表现出良好的结果。

    #include <iostream>
    #include <thread>
    #include <future>
    #include <unistd.h>
    #include "time.h"
    using namespace std;
    void threadCallback(float &number)
    {
        sleep(10);
        number = 10;
    }

    int main()
    {  
        clock_t begin = clock();
        for(int j = 0; j < 2; j++)
        {
            float fitness = 0;
            threadCallback(fitness);
        }
        double duration = double(clock()-begin)/CLOCKS_PER_SEC;
        std::cout << "Original duration ttt" << duration << endl;
        clock_t begin1 = clock();
        float fitness1 = 0;
        std::thread th1(threadCallback, std::ref(fitness1));
        float fitness2 = 0;        
        std::thread th2(threadCallback, std::ref(fitness2));
        th1.join();
        th2.join();
        double duration1 = double(clock()-begin1)/CLOCKS_PER_SEC;
        cout << "My duration ttt" << duration1 << endl;
        return 0;
}

我很感谢我被卡住的任何指导。

我得到的持续时间分别为:0,000095和0,000297。

多线程不是免费的。每次产生线程时,都会有一些初始化开销。另外,拥有多个线程意味着操作系统需要管理它们,因此从一个线程转到另一个线程也不是免费的。

您的问题(又称每个线程上需要运行的代码(只是很小,以获得任何性能好处。作为一般的经验法则,我不建议尝试并行任何需要少数毫秒的代码,因为取决于您的操作系统,这可能是启动另一个线程所需的时间。

您遇到的第二个问题是使用clock()。它考虑了运行程序所花费的时间,而不是自程序开始以来经过的时间。这是完全不同的,因为计算机永远不会一次运行单个程序。为了解决这个问题,我建议查看QueryPerformanceCounter(仅是窗口(。某处可能还有其他功能更通用...

在本地计算机上运行代码,然后检查时间。并在Amazon服务器上运行相同的代码,然后再次检查时间。

通常在云上最初需要一些时间才能开始。但是,一旦执行至少一次,就不应再次花费更多时间。

通过多次执行线程功能来检查时间。

相关内容

最新更新