From Friday, April 19th (11:00 PM CDT) through Saturday, April 20th (2:00 PM CDT), 2024, ni.com will undergo system upgrades that may result in temporary service interruption.

We appreciate your patience as we improve our online experience.



連続したTCP読み込みでのパフォーマンス



使用ソフトウェア:
使用ソフトウェア・バージョン: 6.1
使用ソフトウェア・バージョンに特化:
二次のソフトウェア: N/A

問題: 2つのアプリケーションのデータ通信プロトコルでTCPを使用しています。通信部分ではデータを文字列に変換して、データをTCP/IPに送ります。その際、最初に送信データのサイズを送り、次にデータ自体を送ります。クライアント側では、TCP読み取り関数を2回実行します。一回目ではデータのサイズ、2回目ではデータ本体を読みます。このプログラムを実行すると1回目は素早く実行されます。しかし、ループ内でデータ転送を行うと、数回のループ実行でパフォーマンスが低下します。利用しているデータは複雑でも大きくもありません。なぜ転送速度は減速するのでしょうか?

解決策: これはTCPプロトコルの標準的な動作です。ほとんどのTCP/IPスタックに実装されているネーグルアルゴリズムは、ネットワーク帯域幅を減らすために単一のパケットへ密接に区切られた複数の出力TCPパケットを束ねようとします。アルゴリズムは、応答(ACK: TCPプロトコルの送信に対する応答)により自分のペースで処理を行おうとする適応型です。これは一回の転送では同様の振舞いをしない理由ですが、複数の転送が転送レートを減速させます。
回避策はデータとデータサイズの書き込みを2回ではなく1回のTCP関数で実行することです。文字列にデータを変換し、文字列のデータサイズ情報を付加します。文字列全体を一つのTCP書き込み関数で転送しますが、2つの異なったTCP読み込み関数で読み込むことができます。添付ファイルにこちらの現象を示すクライアントとサーバーVIと修正したVIがあります。クライアントのコードを変更する必要があります。

関連リンク:

添付:


ClientServerWriteRead.zip - ClientServerWriteRead.zip


報告日時: 03/26/2003
最終更新日: 11/15/2006
ドキュメントID: 2VPAE8FP