为什么我的多线程示例与 none 示例花费的时间相同?

Why my multithreading example takes the same amount of time as the none one?

我想在传递多个参数的程序中创建几个线程。我找到了 this 示例,其中显示您可以避免结构并将多个参数传递给线程。有效。或者我是这么想的。当我查看我的函数的持续时间时,它们花费了相同的时间。

我是 运行 我在亚马逊服务器上的代码,所以我不确定是服务器问题还是我的代码问题。

EDIT 我添加了可执行代码并 运行 它在我的本地机器上。它似乎没有显示出良好的结果。

    #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 \t\t\t" << 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 \t\t\t" << duration1 << endl;
        return 0;
}

我很感激任何指导,因为我被困住了。

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

运行 您在本地机器上的代码,并检查时间。 运行 亚马逊服务器上的相同代码并再次检查时间。

通常在云上开始需要一些时间。 但是一旦它至少执行了一次,那么它不应该再次花费额外的时间。

通过多次执行您的线程函数来检查时间。

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

您的问题(也就是每个线程上需要 运行 的代码)太小了,无法获得任何性能优势。作为一般经验法则,我不建议尝试将任何花费少于几毫秒的代码并行化到 运行,因为根据您的操作系统,启动另一个线程所花费的时间可能是这样。

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