0

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

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

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

编辑

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

4

1 回答 1

1

我想你想多了。

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

而且你不需要,在我看来你应该只配置每个请求的实例(很大程度上取决于编码和状态管理的细节)。

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


编辑

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

您可以将工作 PC 作为服务器运行,这似乎是您当前的方向。但我会:

  • 运行 1 台服务器,用于拆分工作并管理工作项
    • 需要检查“过期”项目并重新签发
  • 运行多个客户端,它们可以要求与内核一样多的工作项
    • 需要配置为最大负载。可以是 cores+2 或 cores-1
于 2013-05-09T17:14:58.363 回答