2013-10-08 31 views
3

我們有一個Web應用程序,可以監視像twitter/facebook這樣的幾個社交媒體。我們從這些社交媒體收到的數據將被保存到數據庫中。數據很大,因此我考慮使用Task來將數據保存到數據庫中。並行性,幾千條線程

但我對它是如何工作有一些擔憂。在文檔中找不到如果我爲1個用戶乘以2000用戶啓動10個線程會發生什麼情況?或者可能有10,000個用戶。

究竟會Task嗎?它是否有這種Threads排隊?

任何關於此事的信息都會非常感激。謝謝!

+1

見http://stackoverflow.com/questions/4130194/what-is-the-difference-between-task-and-thread –

+0

你需要1000個內核運行1000個線程。除了服務器上的內核數量之外,可能會降低系統速度,而不是加快速度。 – SWeko

+6

@Sekeko:這是不正確的。我有1650個線程在我的機器上運行,而我(可惜)CPU上沒有1650個內核。請記住,線程可以做比計算更多的事情;他們可以等待IO或網絡,只是睡覺,直到他們需要,等等。這就是說,創建10K工作線程很可能是一個愚蠢的想法和線程池功能更好。 – Joey

回答

4

一個Task只是周圍可以被調度到TaskScheduler的隊列委託的包裝。 Task不會創建任何線程。當您在內部呼叫task.Start()時,它會調用taskScheduler.QueueTask(Task)方法。

默認情況下,所有任務使用的內部使用ThreadPoolTaskScheduler.Default。 您可以在創建TaskFactory時指定自定義任務計劃程序 - 此類具有接受TaskScheduler參數的構造函數。當前的調度程序始終可通過TaskScheduler.Current屬性獲取。

1

一個Task使用Thread做的工作。

Tasks被排隊到ThreadPool

要回答你的問題;你需要嘗試一下,看看應用程序是否應對。

你也許可以分享線程所以它不會是10個* 2000多個線程。