2013-05-09 133 views
0

我有一块工作分为更小的块。我想将每个块分配给NumberCruncher的一个实例(每个实例将托管在一个唯一的EndPoint中,并将在服务器上的特定线程上运行)。然后,指定EndPoint中的NumberCruncher实例将返回并紧缩客户端代理传递给它的那些数字,然后以txt文件格式返回结果。WCF,处理来自多个服务器的同时请求

从客户端来说,我假设我需要保留2个线程安全列表,其中包含链接到NumberCruncher实例并等待返回其结果的EndPoints。 NumberCruncher的第二个等待分配更多工作的实例?

关于将项目添加到这些列表中,如何处理来自服务器的多个请求?一次只能添加一个,所以我假设客户需要发送一条消息给服务,说“是的,你已经成功添加到列表中,现在停止请求添加。”?

编辑

我目前正在运行的时间序列我已经收集了一些分析。我编写了一个程序(Number Cruncher),它分割我想检查的不同参数,并将它们分配给不同的线程(由我的电脑中的核心数决定)。每个线程然后运行带有分配输入的数字计算器。不幸的是,即使使用所有内核,我的电脑也花费了大量的时间。所以我想运行这个相同的程序,但在几台电脑(服务器)上,并编写一个程序,将工作分配给所有的服务器。每个模拟需要约1小时。所以即时看520小时的计算时间(即不适用于一台电脑)。

回答

1

我想你已经在想这个了。

在WCF中,您可以对实例数量(单个,每个会话和每个请求)以及实例是单线程还是多线程进行控制。但不能通过请求的线程关联。

而且你不需要,在我看来,你应该配置instance-per-request(很大程度上取决于编码和状态管理的细节)。

您可以限制服务器以实现最大容量和可接受的延迟。如果你不需要,不要混淆线程管理。


编辑

您可以使用WCF这却是一个分布式计算问题,专门的软件存在。

您可以运行工人电脑作为服务器,这似乎是您当前的方向。但我想:

  • 运行一台服务器,其将工作和管理工作项
    • 需要检查“过期”的项目,并重新发给他们
  • 运行多个客户端,可以问尽可能多的工作项目,因为他们有核心
    • 需要配置最大负载。可能是内核+ 2或核心-1
+0

香港专业教育学院编辑我的问题N + 1的什么ü上面所说的可能是正确的。 – 2013-05-09 17:46:08

+0

为什么1个服务器和多个客户端,而不是其他方式? – 2013-05-09 18:53:40

+0

因为这使得结果的返回更容易。师父也不需要知道/管理工人的能力。 – 2013-05-09 18:57:54

相关问题