私は最大3μsecと最小600nanosecで動作する私のcppコードでblocking sendto(0に設定されたフラグ)機能を使用しています。
ノンブロッキング(つまりすぐに戻る)で時間がかかりにくいメソッドが必要です。
フラグをMSG_DONTWAITに設定してsendtoを使用しようとしましたが、non-blocking sendtoがsendtoを待ち時間の点でブロックしていることに似ています。
非ブロッキングで時間効率の良い代替方法を提案してください。ノンブロッキングsendto関数
0
A
答えて
1
...最大で3マイクロ秒、最小値は600ナノ秒です。
これは、システムがシステムコールを含むソケットバッファにメッセージを入れるのに必要な時間です。これには、カーネルで後で行われるピア自体への送信は含まれません。これは、メッセージをソケットバッファに入れることが、両方の場合に行われる必要があるため、ブロッキングまたは非ブロッキングsendtoを使用するかどうかは関係ありません。これは、select
、epoll
、boost::asio
などがないことを意味します。これは、メッセージをソケットバッファに入れるのに必要な時間を短縮するものではないため、これを高速化するのに役立ちます。
ブロッキングと非ブロッキングsendtoの唯一の違いは、バッファがすでにいっぱいだった場合にシステムがソケットバッファに空きを作るのを待つことです。メッセージ。
アプリケーションが本当に何をするのかは不明ですが、速度を上げる方法は、大きなメッセージを使用してsendto呼び出しの数を減らすことです。
2
正確にソケットが書き込み可能になるときを見つけるには、select()
またはepoll()
のような手法を使用する必要があります。 Linuxの場合はそれぞれman
ページをご覧ください。プラットフォームに依存しないソリューションについては、libevent
ライブラリをご覧ください。
関連する問題
- 1. Objective-Cのノンブロッキング待ち関数
- 2. ノンブロッキング関数の作成方法は?
- 3. sendto関数がエラーを返す - ウィンドウ上のUDPソケット
- 4. ソケット読み込み関数ノンブロッキングの作成方法
- 5. SendTo/Open With
- 6. ノンブロッキングstdio
- 7. ノンブロッキングpthread_join
- 8. ノンブロッキングFIFO
- 9. C++ winsock recvfrom()とsendto()
- 10. send/sendto/recv/recvfrom関数のエラー処理の違いは何ですか?
- 11. ノンブロッキング接続
- 12. 治療:ノンブロッキング・ポーズ
- 13. ノンブロッキングRunonceエントリ?
- 14. ノンブロッキング入力C
- 15. ノンブロッキングChart.Show in FSharp.Charting
- 16. CノンブロッキングUDPソケット
- 17. ノンブロッキング接続タイムアウト
- 18. ノンブロッキングUIスレッドアニメーション
- 19. ノンブロッキングPostgreSQL ORM
- 20. ノンブロッキングSTDINチェックノード?
- 21. Node.jsのノンブロッキングClientRequest.write()
- 22. パイプ、フォーク、ノンブロッキングIPC
- 23. ノンブロッキングgetch()、ncurses
- 24. ノンブロッキング無限ループ
- 25. UDPデバイス - デバイスSendToの問題
- 26. PythonのRawソケットとsendto
- 27. sendtoの最大バッファ長は?
- 28. ノンブロッキングのディスパッチ方法
- 29. Pythonのノンブロッキング・スリフト・サーバー
- 30. lispのノンブロッキング入力
対象のOSはどれですか? – user4581301
['boost :: asio'](http://www.boost.org/doc/libs/1_61_0/doc/html/boost_asio.html)はおそらく一見価値があります。 –