2009-12-03 155 views
-4

這個場景是讓數據庫中有10 TB的對象,每個對象有1 TB。我必須使用多少個線程

我有一個名爲MATCH()的函數,它有一個查詢對象,它的返回類型是double,在這個函數中我有數學計算。我有一個檢查,如果結果的值在0〜1之間,然後我有:

double[ ] Result=new double[eg 1000]

  • 我如何能做到這一點,因爲該系統具有 2 GB RAM - 性能。
  • 我應該鎖哪個部分,使用 互斥或使用線程池? - 線程 安全
  • 我可以同時運行多少個線程 ,特別是比較 到BackgroundWorker

請給我該程序的架構。 (ED:我認爲只是忽略這一行

+1

1)找到shift鍵。 2)添加分段符。 3)做你自己的作業。 4)帶回一個具體的問題 – tster 2009-12-03 05:39:32

+0

說實話,這對我來說似乎不是功課。 – 2009-12-03 05:42:33

+0

它可能不像學校裏的作業,但它仍然是'plz send me teh codez' – tster 2009-12-03 05:44:55

回答

0

如果這是一個沒有UI的應用程序,請使用ThreadPool。您可以設置要使用的線程的最大數量,因爲這看起來像是一個專門的應用程序,所以應該對它進行修改,直到完全正確。

ThreadPool examples here (MSDN)

+0

「如果這是一個沒有UI的應用程序,請使用ThreadPool。」爲什麼它不應該有UI來使用ThreadPool()? – claws 2009-12-03 06:10:38

+0

它與使用BackgroundWorker相反,我應該更加清楚。 BackgroundWorker在非UI環境(性能和控制智能)和線程池中使用是沒有意義的。 – 2009-12-03 07:13:45

1

這裏有一些關於線程的東西可以幫助你。

實際上,每個CPU不需要多於一個線程,更多線程只會在調度器上增加更多的開銷。但是,線程經常會阻塞,就像通過數據庫查詢數據一樣,所以每個cpu只保留一個線程是不可行的,您可能需要更多的時間才能使CPU使用率達到100%。

也就是說,在你的場景中,有多於一個或兩個線程在同一個數據庫上查詢數據對你來說無濟於事,因爲數據庫是開銷。我會考慮只創建一個或兩個同時向數據庫查詢數據的線程,或者更好地使用異步模式並使用Command.BeginExecute ...()方法,並且只允許少數幾個並行查詢。查詢完成後,您現在可以對您必須對數據執行的處理進行排隊,這可以在.Net ThreadPool上執行,也可以在每個cpu只包含一個線程的自定義線程池中完成,如果數據的處理花費的時間超過查詢它。

相關問題