好的,我確定有一個簡單的解釋,並且我缺乏正確的線程教育使我無法看到它,所以請裸露在我身邊......與Task.Factory同時運行多個線程無法正常工作
我的應用程序處理數據饋送。當一個新的數據包進來時,一個調度員收集它,並引發一個事件,一個適當的監聽者可以拿起並做它需要做的事情。
因此,現在我試圖模擬活飼料執行一些測試。我根據活動列表的數量創建了一個向分發器提供數據包的類。
這是我使用啓動它位於存儲器中的feed()方法和生成的分組在每個給定的時間間隔的代碼:
foreach (var item in Listeners)
{
object listener = item;
Task.Factory.StartNew(()=> Feed(listener), TaskCreationOptions.LongRunning);
}
進料()方法的工作是這樣的:
while(run)
{
packet = GenerateThePacket(listener.Id); // Make a packet with the listener id
FeedHandler.OnPacketRecieved(this, packet); // Raises the FeedHandler's event as if it came from outside.
Thread.Sleep(1000/interval) // interval determines how many packets per second
}
因此,如果我有100個監聽器,它將啓動100個Feed()實例,每個實例都有不同的監聽器ID,並且在請求的時間間隔內同時啓動PacketRecieved事件。
我猜你們很多人已經知道它有什麼不好,但我會解釋這個問題: 當我使用1或2的間隔時,它的效果很好。當我選擇10(即每100ms一個數據包)時,它不能正常工作。每個線程以不同的時間間隔啓動,其中最新創建的工作正常且快速(10 /秒),並且第一個線程創建工作實際上很慢(1 /秒或更少)。
基本上,我想100個線程不能同時運行,所以他們只是在等待......我想。
因此,究竟發生了什麼,以及如何實現一個真正的饋電發生器,它可以同時爲100個聽衆模擬10個數據包。
謝謝大家
你正在使用哪種操作系統,並且你是否在這些方法中以任何方式涉及套接字? – 2011-02-10 13:51:08
Windows 7與4GB的RAM,沒有插座 – 2011-02-10 13:56:45