TCP ソケットを介してデータを送信するアプリケーションがあります。これには 8 つの TCP 接続を使用します。ソケットの送受信は、バックグラウンド スレッドで呼び出されます。ソケットの配列を繰り返し処理して、すべてのソケットを介してデータを送信する (順次) スレッドは 1 つだけです。
送信者スレッドのコードは次のようなものです。
for(i = 0; i < 8; i++) {
nBytesWrriten = send (tcpsock[i], data2, nleft, 0))
//error handling and process more data
}
受信スレッドは次のようになります。
for(i = 0; i < 8; i++) {
sz[i] = recv (tcpsock[i], data, MAX_UDT_SIZE, 0);
//process data
}
すべてが正常に機能し、データが転送されますが、時間がかかりすぎることがあります。ログを確認したところ、ほとんどの場合、送信者スレッドは正常に動作することがわかりましたが、「send」呼び出しの前後でタイムスタンプに大きな遅延 (場合によっては 1 秒以上) が発生することがあります。
送受信アクションはすべてワーカー スレッドで行われます。送信呼び出しの直前/送信時のスレッドのプリエンプションと関係がありますか? 送信呼び出しの直前にスレッドのプリエンプションを回避できますか? それとも、受信スレッドがソケットでデータを受信していないのに、より多くのデータを準備して送信しているため、遅延が発生しているのでしょうか?
データの送信に時間がかかりすぎるため、これを最適化するにはどうすればよいですか?
ありがとう