【问题标题】:Thread pool and data affinity线程池和数据亲和性
【发布时间】:2011-11-21 02:03:23
【问题描述】:

我正在设计一个 OMS 并尝试使用多线程技术来加快处理速度。

一种简单的方法是静态分配线程:一个线程用于所有以字母开头的证券。显然,他们中的一些人可能很忙,而另一些人则无事可做。而且我们事先不知道用户会输入哪些股票。

所以我转向线程池。现在时间很可能在线程之间分配得更均匀。但是有一个开销需要处理:我必须锁定每个订单,这肯定是不愉快的。

您知道如何最大限度地减少锁定时间并实现更高的吞吐量吗?

非常感谢您的建议。

P.S,这是一个 Unix 环境。使用的语言是 C++

【问题讨论】:

    标签: c++ multithreading pool


    【解决方案1】:

    一般来说,每个任务线程是非常糟糕的决定。最好的方法是将任务分成具有自己的线程池的逻辑组(或者,每个任务可能有 1 个线程)。此外,您应该组织任务之间的通信,例如通过查询。 您是否正在寻找像 threadpool 这样的现有线程池实现?

    【讨论】:

    • Alex,在我看来,所有线程池实现都不考虑数据亲和性。因此,如果我使用线程池,则需要大量锁/通知来确保数据完整性。您是否知道任何考虑数据亲和性的线程池实现?理想情况下,我不希望我的代码有任何锁定。订单的所有事件都应按顺序处理。谢谢帕特
    • “所有线程池实现都不考虑数据亲和性” - 是的。 “如果我使用线程池,则需要大量锁/通知来确保数据完整性” - 不。基本上,您必须添加锁/通知以提供原子添加/删除查询操作,以防使用队列进行通信。我想你最好看一下 throw ACE (cs.wustl.edu/~schmidt/ACE.html) 教程,它们提供了一些关于线程池服务器创建的信息。
    猜你喜欢
    • 1970-01-01
    • 2017-12-06
    • 2011-01-15
    • 2012-11-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多