2015-07-10 29 views
2

我正在測試Microsoft Orleans作爲分佈式計算框架的可行性。它似乎可能工作,但我想知道如何設置給定筒倉中的最大活動穀物數量?微軟奧爾良每個筒倉的最大谷物

我的穀物不會純粹被CPU束縛,會執行一些IO和其他相關任務。我擔心,如果我讓它瘋狂運行,它會產生大量的事件,從而導致整個事情陷入困境。

像這樣的筒倉配置可能嗎?

回答

4

奧爾良非常適合非CPU綁定的工作。奧爾良穀物被設計爲使用Task<T>而不是線程,因此您應該始終使用C#的async/await功能執行異步IO。

如果您確實需要執行阻塞IO,可以將糧食SynchronizationContextawait結果在你的糧食之外執行的IO,像這樣:

var result = await Task.StartNew(() => { 
    // Perform blocking work. 
    return 43; 
}, TaskCreationOptions.LongRunning); 

​​提示,調度,一個新的應該使用線程。 更好的方法是創建您自己的ThreadPool &後續TaskScheduler該工作並將其用於您的IO。

請注意,您應該瞭解潛在的dangers of Task.StartNew

0

看來Silo配置xml文件具有該配置能力。

<Scheduler MaxActiveThreads="15"/> 

它的XSD被指定爲online

2

將所有阻塞操作卸載到線程池並將MaxActiveThreads保留爲默認值(#cores)會更好。 基本上你永遠不想阻止奧爾良線程(那些MaxActiveThreads)。那些奧爾良線程應該做一個簡單的計算併發出外部異步調用(對其他穀物或外部服務)。所有重計算都不應該在Orlean的線程上完成。

你可以做到這一點,仍然保持單線程執行保證。 請參閱:http://dotnet.github.io/orleans/Advanced-Concepts/External-Tasks-and-Grains