2013-05-09 177 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

相關問題