クライアントサーバーシステムを設計しています。N 個のクライアントがサーバーに接続して、複数のメッセージを送信できます。サーバーはメッセージをデータベースに挿入し、メッセージを外部サーバーに投稿し、クライアントがメッセージを追跡できるように一意の ID をクライアントに返します。
ボトルネックと IO 待機時間を回避するには、このサービスを 2 つのタスクに分割します
- 詳細をデータベースに記録する
を使用して 20 の http 投稿を送信するバッチ プロセス
Task sendMessage =new Task[20] ExecutorService threadExecutor = Executors.newFixedThreadPool( 20 ); //get the list of message not send from database send them and update the database for(int i=0;i<10;i++) { threadExecutor.execute( task[i] );//send message via HTTP post }
これは良いデザインでしょうか。パフォーマンスを向上させるために、ポイント 2 を個別に実行することをお勧めします。また、上記の場合、各スレッドがデータベースに接続して更新すると、ロックやダーティ ライトが発生しますか?