2016-10-01 22 views
0

私は最大3μsecと最小600nanosecで動作する私のcppコードでblocking sendto(0に設定されたフラグ)機能を使用しています。
ノンブロッキング(つまりすぐに戻る)で時間がかかりにくいメソッドが必要です。
フラグをMSG_DONTWAITに設定してsendtoを使用しようとしましたが、non-blocking sendtoがsendtoを待ち時間の点でブロックしていることに似ています。
非ブロッキングで時間効率の良い代替方法を提案してください。ノンブロッキングsendto関数

+0

対象のOSはどれですか? – user4581301

+0

['boost :: asio'](http://www.boost.org/doc/libs/1_61_0/doc/html/boost_asio.html)はおそらく一見価値があります。 –

答えて

1

...最大で3マイクロ秒、最小値は600ナノ秒です。

これは、システムがシステムコールを含むソケットバッファにメッセージを入れるのに必要な時間です。これには、カーネルで後で行われるピア自体への送信は含まれません。これは、メッセージをソケットバッファに入れることが、両方の場合に行われる必要があるため、ブロッキングまたは非ブロッキングsendtoを使用するかどうかは関係ありません。これは、selectepollboost::asioなどがないことを意味します。これは、メッセージをソケットバッファに入れるのに必要な時間を短縮するものではないため、これを高速化するのに役立ちます。

ブロッキングと非ブロッキングsendtoの唯一の違いは、バッファがすでにいっぱいだった場合にシステムがソケットバッファに空きを作るのを待つことです。メッセージ。

アプリケーションが本当に何をするのかは不明ですが、速度を上げる方法は、大きなメッセージを使用してsendto呼び出しの数を減らすことです。

2

正確にソケットが書き込み可能になるときを見つけるには、select()またはepoll()のような手法を使用する必要があります。 Linuxの場合はそれぞれmanページをご覧ください。プラットフォームに依存しないソリューションについては、libeventライブラリをご覧ください。

関連する問題