2017-08-18 12 views
1

私はソケット(TCP)を使ってデータを交換するオープンソースパッケージを開発しています。 Linuxでは、ローカルのUnixソケットまたはリモートソケットを使用できます。ローカルループバックを介してローカルソケットのパフォーマンスをリモートと比較すると、Unixソケットが50倍高速になることがわかります。他はすべて同じです。UNIXソケットがローカルループバックTCPよりも50倍速くなるはずですか?

このパフォーマンスの相違は予想されますか、それともコードのどこかでエラーを示していますか?

ほとんどの条件下で、データ交換は双方向で、通常は1バイトのコマンド(uint8_t)のようなものです。何が起こっているのか、続いて1kb程度のデータが続きます。

答えて

0

最初のバイトを別に送信すると、あなたのプロトコルは実際にはNagleアルゴリズムを実行することが確実です。一度にすべてを送信するには、writev()またはsendmsg()というバッファリングを使用します。

+0

Nagleのアルゴリズムを無効にすることでこれをテストできますか? – crobar

+0

確かに、プロダクションコードでそれをやりたければならないかもしれませんが、効率が重視される場合は、できるだけ独自のバッファリングや集約を行うべきです。 – EJP

+0

ありがとう、私は今週テストし、おそらくこれを答えにします。 – crobar

関連する問題