0

UDP を信頼できるものにするために、UDP のカスタマイズに取り組んでいます。この設計上の問題は、プログラム全体の準備が整い、ソースからシンクにパケットを送信し始めた後に初めて気付きました。

シナリオ: パケットの受信用に 1 つのスレッドを作成しました。親はパケット送信ジョブを行います。これは単なる POC であるため、親によってメモリがヒープに割り当てられるグローバル ポインターとして、バッファーと共通データ構造を保持しています。ミューテックスを使用して重要なメモリ セクションを管理しています。

信頼性の一部として、データ パケットとは別にいくつかの制御パケットを送信します。クライアントはいつでもデータ パケットを送信し、サーバーから制御パケットを受信しますが、サーバーはデータ パケットを受信し、制御パケットを送信します。私の理解では、送信と受信は単一のソケットとデフォルトのブロックで同時に機能するため、単一のソケットを使用しました。

問題: テスト目的で、ソースからシンクに 100 個のパケットを送信します。残念ながら、サーバー側のスレッドはビジー状態で、パケットを受信し続け、バッファに格納します。親スレッドがコンテキスト スイッチを取得するまで、サーバー コードはパケットをアプリケーションに配信しません。これにより、通信全体に許容できない遅延が発生します。

問題が何であるかを理解するのを手伝ってください。パフォーマンスを向上させるために何を変更できますか?

前もってありがとう、ケダー

4

1 に答える 1

1

ミューテックスを使用しているため、パケットの送信後に一方のスレッドでミューテックスが解放されると、もう一方のスレッドがパケットを消費する必要があります。ミューテックスをすぐに解放していない可能性があります。

別の方法として、ソケットの select() メソッドに unblock-on-receive を処理させます。

于 2012-05-26T05:24:59.617 に答える