2012-10-18 65 views
1

有两种架构解决方案来实现的并发:共享所述V消息

  • 哪个共享状态多张线程。这需要代码锁等锁
  • 消息传递模型。消息被放入队列中,然后由单个线程处理。

我的问题是,什么时候多个线程的性能优于消息传递模型?例如,假设您有一台可以通过将消息请求放置在内部提示上来异步处理消息请求的单个服务器。如果使用多线程服务器模型,那么是否引入了瓶颈(例如,即使在TCP/IP)级别也没有引入。

谢谢。

回答

1

虽然您的问题的答案可能取决于很多因素,但我认为需要考虑的一个重要方面是如何充分利用您计算机中的多个CPU。正如你在这里描述的那样,如果你的机器有多个CPU,用一个线程处理所有消息的消息队列方法并不是最优的。处理所有消息的一个线程可能会占用一个CPU,而其他线程将使用其他可用的CPU。共享状态方法可能更好地利用多个CPU。

但是,另一种方法是修改消息队列算法,具有多个线程 - 在CPU数量之下最多一个或两个 - 清空队列并同时处理消息。这可以让你对CPU的使用情况有一定的控制,特别是如果你可以选择将特定的线程绑定到特定的CPU。这种高度的控制可能会使消息队列的多线程版本优于共享状态。

假设这个答案是相关的,源于现今许多机器确实有多个CPU的事实。如果这不适用于你的情况,那么请给出一个关于你的边界条件的更详细的描述,以及当你说“跑赢”时你的表现是什么。