在我的服務器應用程序中,我想處理大量來自客戶端任務的任務。客戶端應用程序提交用於處理和處理每個任務的任務,需要調用Web服務進行預處理,然後纔會進行實際處理。在不阻塞的情況下處理大量需要調用Web服務的任務
我被建議有一個隊列,我將放入服務器接收的所有任務。然後一個線程從隊列中提取任務並調用Web服務。如果在Web服務上阻塞的話,可能會有40個線程執行此操作,其他人也可以執行呼叫,從隊列中拾取項目。在線程接收到來自Web服務的響應後,它將預處理項目放在第二個隊列中,從另一個線程處理另一個線程的任務。並且這個隊列將有1個線程(每個處理器將進一步縮放 - 因此可能是4核心機器上的4個(或更多)線程)。
我相信這可以更有效地完成,無需40個預定義的線程進行Web服務調用,也可能有1個隊列。我認爲有更多的選擇可以讓.NET更高效。有什麼建議麼?
這可能是更廣泛的問題,如何實現更好的這樣一個系統,而不是.net特定。
40 [任務](http://msdn.microsoft.com/en-us/library/system.threading.tasks.task.aspx)不會表示40個物理線程。和/或看看異步/等待。 –
會有數百萬的傳入任務。 40個線程是一種池服務他們。當一個線程阻塞一個長操作時,另一個線程選擇下一個任務。當所有40(N)個線程都被阻塞時 - 處理被阻止。 N有一些實驗值可以找到。 –