【发布时间】:2014-08-23 00:53:38
【问题描述】:
我正在编写一个服务,它必须从 AMQP 消息队列中读取任务并根据消息类型执行同步操作。这些操作可能是发送电子邮件或访问 Web 服务,但假设没有错误,通常会在几百毫秒左右。
我希望它是可扩展的,以便将来可以添加其他操作。无论哪种方式,消息量都可能非常高,以 100 条/秒的速度涌入。
我正在玩几种设计,但我的问题如下:
-
我应该使用哪种类型的线程模型?我:
- a) 使用单个线程从队列中消费并将任务放在线程池中?如果是这样,我如何表示这些任务?
- b) 创建多个线程来托管自己的消费者并让它们同步处理任务?
- c) 创建多个线程来托管他们自己的消费者,并让他们都注册一个委托来处理进来的任务?
在 a 或 c 的情况下,让衍生线程与主线程通信的最佳方式是什么?我需要确认从队列中出来的消息。我是否从主线程侦听的衍生线程引发事件?
在给定 x 核的情况下,是否有关于我应该运行多少线程的指南?是 x, 2*x 吗?该系统上还运行着其他服务。
【问题讨论】:
标签: c#