2011-07-05 124 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