我正在嘗試使用CCR迭代器作爲需要並行處理大量數據饋送的任務的解決方案,其中需要按順序處理來自每個饋送的數據。沒有一個飼料是相互依賴的,所以按順序的處理可以平行進行。什麼是使用CCR按順序處理事件的有效方法?
下面是一個快速和骯髒的模型與一個整數飼料,它只需將整數端口以約1.5K /秒的速度推入端口,然後使用CCR迭代器將它們拉出以保持按順序處理保證。
class Program
{
static Dispatcher dispatcher = new Dispatcher();
static DispatcherQueue dispatcherQueue =
new DispatcherQueue("DefaultDispatcherQueue", dispatcher);
static Port<int> intPort = new Port<int>();
static void Main(string[] args)
{
Arbiter.Activate(
dispatcherQueue,
Arbiter.FromIteratorHandler(new IteratorHandler(ProcessInts)));
int counter = 0;
Timer t = new Timer((x) =>
{ for(int i = 0; i < 1500; ++i) intPort.Post(counter++);}
, null, 0, 1000);
Console.ReadKey();
}
public static IEnumerator<ITask> ProcessInts()
{
while (true)
{
yield return intPort.Receive();
int currentValue;
if((currentValue = intPort) % 1000 == 0)
{
Console.WriteLine("{0}, Current Items In Queue:{1}",
currentValue, intPort.ItemCount);
}
}
}
}
讓我感到驚訝的是,CCR無法跟上Corei7盒子,隊列大小不斷增長。在另一個測量從Post()到Receive()的負載或〜100 Post/sec的延遲的測試中,每個批次中第一個Post()和Receive()之間的延遲約爲1ms。
我的樣機有什麼問題嗎?如果是這樣,使用CCR做這件事更好的方法是什麼?
你能詳細說明CCR是什麼嗎? – 2011-03-23 00:51:20
CCR是Communication and Coordination Runtime,一個專爲異步工作流設計的庫。它是Microsoft Robotics Studio的一部分,現在免費提供。考慮到最初的700美元限制了潛在的觀衆,以及TPL的思想推動,除了某些行業之外,它已被調控到陰影。儘管如此,CCR工作流程是新的異步框架的一部分,CCR Devs表示將在1月份「下個月儘快」發佈一項重大聲明。檢查CCR標籤以獲取更多信息。 – Chuu 2011-03-23 01:32:24
提及「大公告」在哪裏? – spender 2011-04-06 22:35:20