实现并发有两种架构方案:
- 共享状态的多个线程。这需要锁定代码等
- 消息模型。消息被放入队列,然后由单个线程处理。
我的问题是,多线程何时优于消息传递模型?例如,假设您有一个服务器,它可以通过将消息请求置于内部提示上来异步处理它们。如果您使用多线程服务器模型,是否存在任何未引入的瓶颈(例如甚至在 TCP / IP)级别。
谢谢。
实现并发有两种架构方案:
我的问题是,多线程何时优于消息传递模型?例如,假设您有一个服务器,它可以通过将消息请求置于内部提示上来异步处理它们。如果您使用多线程服务器模型,是否存在任何未引入的瓶颈(例如甚至在 TCP / IP)级别。
谢谢。
尽管您的问题的答案可能取决于很多因素,但我认为要考虑的一个重要方面是如何充分利用机器中的多个 CPU。正如您在此处所描述的,如果您的机器有多个 CPU,则使用一个线程处理所有消息的消息队列方法并不是最佳的。处理所有消息的一个线程可能会最大限度地使用一个 CPU,而其他线程将未充分使用其他可用的 CPU。共享状态方法可能会更好地利用多个 CPU。
然而,另一种方法是通过让多个线程(最多比 CPU 数量少一到两个)来清空队列并同时处理消息来修改消息队列算法。这使您可以对 CPU 的利用方式进行相当多的控制,尤其是当您可以选择将特定线程绑定到特定 CPU 时。这种高度的控制可能会使消息队列方法的多线程版本优于共享状态。
这个答案是相关的假设源于当今许多机器确实具有多个 CPU 的事实。如果这不适用于您的情况,那么请更详细地描述您的边界条件,以及当您说“表现出色”时,您所说的性能是什么意思。