WCF,处理来自多个服务器的同时请求
本文关键字:服务器 请求 处理 WCF | 更新日期: 2023-09-27 18:12:58
我有一个工作块,我把它分成了更小的块。我想将每个块分配给NumberCruncher的一个实例(每个实例将托管在一个唯一的端点上,并将在服务器上的一个特定线程上运行)。然后,指定端点上的NumberCruncher实例将处理由Client代理传递给它的那些数字,然后以txt文件格式返回结果。
从客户端,我假设我需要保持2个线程安全列表,1包含链接到NumberCruncher实例的端点,这些实例正在等待返回结果。第二个NumberCruncher的实例正在等待分配更多的工作?
关于向这些列表添加项目,如何可能处理来自服务器的多个请求?一次只能添加一个,所以我假设客户端需要向服务发送一条消息,说"是的,您已成功添加到列表中,现在停止请求添加"。
编辑
我目前正试图对我收集的时间序列进行一些分析。我写了一个程序(Number Cruncher),它分割了我想要检查的不同参数,并将它们分配给不同的线程(由我的pc中的核心数量决定)。然后,每个线程用指定的输入运行Number Cruncher。不幸的是,这在我的电脑上花费了大量的时间,即使使用了所有的核心。所以我想在几台pc(服务器)上运行相同的程序,并编写一个将工作分配给所有服务器的程序。每次模拟大约需要1小时。所以我看520小时的计算时间(即不可行的单个pc)。
我想你想多了。
在WCF中,您确实可以控制实例的数量(单个,每个会话和每个请求)以及实例是单线程还是多线程。但不能超过请求的线程亲和性。你不需要,在我看来,你应该配置每个请求实例(很大程度上取决于编码和状态管理的细节)。
您可以限制服务器以实现最大容量和可接受的延迟。如果没有必要,不要乱搞线程管理。
编辑后
您可以使用WCF来解决这个问题,但这是一个分布式计算问题,存在专门的软件。
你可以运行工作pc作为服务器,这似乎是你目前的方向。但是我想:
- 运行一个服务器,用于拆分工作并管理工作项
- 需要检查"过期"物品并重新发放
- 运行多个客户端,可以请求尽可能多的工作项,因为他们有核心
- 需要配置为最大负载。可以是cores+2或cores-1