2017-11-10 9 views
0

私の現在のプロジェクトでは、何らかのデータを記録するために何かを非同期的に(非同期で)書き込む必要がある場合、スレッドプールエグゼキュータを使用しています。 各書き込み呼び出しにthreadを使用するのではなく、単にIO操作でイベント駆動メカニズムに似たものがあります。 単一のスレッドがwhileループで実行され、async db callを実行します。javaと同様NIOはネットワークコールに対して行われます。スレッドを使用しない非同期DB書き込み

答えて

1

いいえ、あなたは何をしていても少なくとも1つのスレッドが必要です。 driver that uses NIOをお持ちの場合は、select()を実行する余分なスレッドが残っています。

あなたの現在のプロジェクトでどのように実装しているのか分かりませんが、エグゼキュータを使用している場合でも(SingleThreadExecutorで十分です)、それほど複雑ではありません。

+0

この場合、ステートメント(更新)は順番にしか実行されません。遅いステートメントは他のステートメントにも影響しますか? DBが並列に処理できる場合でも、N個の文の実行にはN * tかかるでしょうか?更新の待ち行列は、同時に試行される多くの要求よりも速く成長できますか? – starikoff

+0

私は、ログ・ステートメントを挿入するのは高価な操作ではないと想定しています(そうであれば、Javaコードではなくデータベースをチューニングする必要があります)。それでも、並列化は、同じテーブルで作業しているので、あまり役に立ちません。バッチ処理を行う方が効率的です。質問は本当に多くの情報を提供しませんでした。 – Kayaman

関連する問題