【问题标题】:Should I use static work pool or dynamic work pool (of threads)?我应该使用静态工作池还是动态工作池(线程)?
【发布时间】:2011-05-30 01:17:30
【问题描述】:

我正在运行一个运行良好的 pthreads 程序,但是我没有看到预期的加速。我怀疑我花了很多时间来创建和销毁我的线程。

我运行的线程永远不会超过我拥有的 cpus。

在 20 分钟内,我创建了大约 5000 个线程。

我的问题是是否值得实施一个适当的静态工作池,这样我只会分配静态数量的工人?

【问题讨论】:

    标签: c++ c multithreading pthreads


    【解决方案1】:

    首先,您应该衡量您的应用在哪里花费了所有时间。这意味着每秒大约创建 4 或 5 个线程,这很多,但可能不是您花费所有时间的地方。

    但是,如果您总是将自己限制为 N 个线程,其中 N 是 CPU 的数量,您可能应该只预先创建 N 个线程并使用某种算法安排工作在每个线程上运行感觉你正在做的计算。

    【讨论】:

    • 确实线程创建不是瓶颈。在低端系统上,线程创建大约需要 30 微秒。 20 分钟中有 150000 微秒不算什么。
    • 一定要检查你的线程在做什么。您的 CPU 可能一次能够处理多条指令,但是您的代码正在与之通信的其他硬件/软件呢?例如,如果他们正在写入单线程 HDD,那么您将不会看到性能提升。
    • 是的,@SlappyTheFish 提出了一个很好的观点。由于我们对问题空间一无所知,因此很难给出建议。但总的来说,检查多线程程序中的资源争用是发现瓶颈的好地方。
    猜你喜欢
    • 2012-06-24
    • 2018-01-20
    • 1970-01-01
    • 2018-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-16
    • 1970-01-01
    相关资源
    最近更新 更多