私は深刻な問題があります。私は1時間で50万レコードを処理するコードに取り組んでいます。通常、これらのレコードはそれぞれ別のテーブルにデータを持っています。HibernateとThreadingを使って何十万というレコードをすばやく処理しています。
私は現在休止状態を使用しています。私は100レコードを処理するために複数のスレッドを持つExecutorサービスを使用しようとしました.10個のスレッドがそれぞれ100レコードを処理し、スレッドが完了するとプールを残し、別のスレッドが入ります。
しかし、事は速度が改善されていません。私が気づいたのは、スレッドを実行するほどプロセス全体が遅くなるということです。現在、これらのレコードのうち100件をスレッドが処理するには2分かかります。私は10スレッドを実行している場合、それは1スレッドで1000レコードを実行することと本質的に同じです20分かかる!
これらのスレッドは同時に実行されるはずだと思いました。私が利用できる別の実装はありますか?
私は8コアと64GIG RAMを搭載したサーバーを使用しています。
おかげ
あなたのボトルネックはおそらく他の場所です。ディスク/ネットワークIO、データベースロック(トランザクション管理)、Javaコードのセマフォ(同期ブロックなど)について考えてみてください。詳細な解析から始めたいと思っています... – home
"私はこれらのスレッドが同時に実行されるはずだと思いました。 –
私は1つのスレッドを実行すると、100レコードの処理を完了するのに約2分かかります。 1つの処理100レコードで10スレッドを実行すると、約20分かかります。それは私と同時のようには聞こえません –