我目前正在处理一个可以进行一些检查的脚本。插入Mongo服务器的每个数据库。它是多线程的。
for (int i = 0; i < countDatabase; i++) {
new threadDatabase(database.get(i).toString()).start();
}
问题:我有16个数据库要解析...我担心脚本将被设置的PC,不会管理16个(或更多)线程......
任何想法如何处理大量线程?我听说过池,但不确定它是否可以处理我作为参数发送的数据库名称...
由于
答案 0 :(得分: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);
}
});
}
答案 1 :(得分:2)
PC上的16个线程?
查看我的Windows任务管理器/性能,它显示了1238个运行的线程。它甚至没有出汗。顶级进程是sidebar.exe - 66个主题。
好的,所以你正在运行一些其他U ** xy OS - 16个线程也不太可能是那里的问题。
16个线程什么都没有。如果它们都是CPU密集型的,那么盒子就会被加载,但是,嘿,这就是重点!
如果必须尝试使用池,可能尝试提高性能,但不要仅仅因为您担心16个线程对您的操作系统而言太过分了。
RGDS, 马丁