0

在我的服务器应用程序中,我想处理大量来自客户端的任务。客户端应用程序提交任务进行处理,处理每个任务都需要调用 Web 服务进行预处理,然后进行实际处理。

有人建议我有一个队列,我会将服务器接收的所有任务放入其中。然后一个线程从队列中获取一个任务并调用一个 Web 服务。如果一个线程阻塞 Web 服务,其他线程也可以调用,从队列中获取项目,可能会有 40 个线程执行此操作。在一个线程接收到来自 Web 服务的响应后,它将预处理的项目放在第二个队列中,另一个线程从该队列中获取任务进行处理。该队列将有 1 个线程(每个处理器将进一步扩展 - 因此在 4 核机器上可能有 4 个(或更多)线程)。

我相信这可以更有效地完成,而无需 40 个预定义线程进行 Web 服务调用并且可能有 1 个队列。我认为有多种选择可以更有效地做到这一点。NET。有什么建议么?

如何更好地实施这样的系统而不是特定于 .net 的系统可能是更广泛的问题。

4

3 回答 3

2

我认为您应该了解 .net 4.5 中可用的 async/await 构造。很难说它是否满足您的所有要求,但您应该检查一下。

于 2013-10-13T10:44:56.603 回答
1

我建议研究TPL Dataflow,这是一个允许您为数据处理定义“管道”或“网格”的库,然后将数据放入其中。TPL Dataflow 非常适用于异步(例如,Web 请求)块和同步(例如,处理)块,并且有很多并行选项。

于 2013-10-13T14:53:29.437 回答
0

如果由于某种原因您没有达到框架的 4.5 版本,请将单向 WCF 调用视为一种“即发即弃”的方法。

于 2013-10-13T14:37:36.573 回答