2011-07-05 123 views
0

我目前正在處理一個腳本,它會爲Mongo服務器的每個數據庫插入一些檢查&。它是多線程的。Java - 管理大量線程與多核

for (int i = 0; i < countDatabase; i++) {  
    new threadDatabase(database.get(i).toString()).start();    
} 

問題:我有16個數據庫解析......恐怕PC在腳本會成立,將無法管理16(或更多)線程...

任何想法如何處理大量的線程?我聽說池,但不知道它可以處理數據庫的名字,我送的參數...

感謝

+0

你應該接受一些你以前有用的答案。它使人們不太可能幫助(包括我自己) –

回答

2

16個線程的PC上?

看着我的Windows任務管理器/性能,它顯示了1238個線程在運行。它甚至不會冒汗。頂級進程是sidebar.exe - 66個線程。

好吧,所以你正在運行一些其他的U ** xy OS - 16線程不太可能成爲問題。

16個線程是無關緊要的。如果他們都是CPU密集型的,那麼這個盒子就會被加載,但是,嘿,這就是關鍵所在!

如果你不得不努力嘗試一下游泳池,可能會嘗試提高性能,但不要僅僅因爲擔心16個線程對於你的操作系統太多而不這樣做。

RGDS, 馬丁

5

16個線程是不是有很多的線程。當然,這可能比你擁有CPU核心的線程多,但如果你正在與遠程數據庫交談,你將花費大部分時間等待I/O完成,所以CPU不會成爲限制因子。

除此之外,線程池會工作得很好了你:

ExecutorService executorService = ...; 
for (int i = 0; i < countDatabase; i++) {  
    final String dbName = database.get(i).toString(); 
    executorService.submit(new Runnable(){ 
     @Override 
     public void run() { 
      parseDatabase(dbName); 
     } 
    }); 
} 
+0

謝謝,我會測試一下。事實上,我在帶有4個內核的PC上測試了8個線程,並且對於我來說(對於我來說),所有的CPU內核都被完全使用(有時爲80%) – kozher