gpt4 book ai didi

c++ - 如何为许多短任务设计线程

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:51:56 26 4
gpt4 key购买 nike

我想使用多线程来加速我的程序,但不确定哪种方式是最佳的。

假设我们有 10000 个小任务,完成其中一个可能只需要 0.1 秒。现在我有一个 12 核的 CPU,我想使用 12 个线程来让它更快。

据我所知,有两种方式:

1.任务池

始终有 12 个线程在运行,每个线程在完成当前工作后从任务池中获取一个新任务。

2.分离任务

通过将 10000 个任务分成 12 个部分,每个线程处理一个部分。

问题是,如果我使用任务池,那么当多个线程尝试访问任务池时,锁定/解锁会浪费时间。但是第二种方式并不理想,因为一些线程提前结束,总时间取决于最慢的线程。

我想知道您是如何处理此类工作的,还有其他最佳处理方式吗?谢谢。

编辑:请注意,数字 10000 只是示例,在实践中,它可能是 1e8 或更多任务,每个任务 0.1 也是平均时间。

EDIT2:感谢您的所有回答 :] 很高兴知道各种选项。

最佳答案

因此,介于这两种方法之间的一个方法是分成 100 个批处理,每个批处理有 100 个任务,然后让核心一次从任务池中选择一批有 100 个任务。

或许,如果您针对单个任务在单个内核中对执行时间的随机性进行建模,并获得互斥锁锁定时间的估计值,您或许能够找到最佳批处理大小。

但无需太多工作,我们至少有以下引理:

最慢的线程最多只能比其他线程多花费 100*.1 = 10s。

关于c++ - 如何为许多短任务设计线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10002336/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com