2011-07-05 8 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スレッドです。

OK、他のU ** xy OS - 16スレッドを実行しているので、そこに問題はないでしょう。

16スレッドは何もありません。それらがすべてCPUを大量に使用する場合、ボックスはロードされますが、ちょっと、それがポイントです!

パフォーマンスを向上させようとする必要がある場合はプールを試してください。ただし、16スレッドがご使用のOSにあまりにも多すぎることを恐れているからです。

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つのスレッドでテストし、私にとっては(htopで)すべてのCPUコアが十分に使用されていた(時には80%) – kozher

関連する問題