0

UDPを介して状態スイッチをログに記録するプログラムがあります。ロギング機能をできるだけ高速にする必要がありますが、ネットワークが遅いと見なされていることを知っています。別のスレッドからUDPデータを送信することに利点はありますか、または何も設定または待機する必要がないため(ソケットを事前に開いていると仮定して)、UDPをただのクイックコールで送信していますか?
すぐに戻ってきれば問題ありませんが、内部でI / Oリソースを待機している場合は、問題になる可能性があります。しますか?

4

2 に答える 2

1

大量のデータ(つまり、毎分メガバイト)を送信しない場合(または非常に頻繁に)(毎分数百のパケット)、send(またはwrite)はかなり高速であると思います。

時間がかかる唯一の理由は、ネットワークが取ることができるよりも多くのデータを供給している場合です。そのため、カーネルは空きバッファスロットが利用可能になるまで待機する必要があります。

sendmsgただし、パフォーマンスに関連するすべての場合と同様に、インターネットで質問するよりも測定する方が常に優れています...最近のPCでは、小さなパケットの場合、呼び出しは数百ナノ秒のオーダーであると予想されます。パケットが数十バイトを超え、最大数キロバイトのサイズの場合、8バイトごとに1ナノ秒余分にかかります。数百キロバイトに達すると、タイミングは3〜10倍に増加します。

于 2013-02-09T21:54:24.210 に答える
0

かもしれない。待機しないようにするには、ソケットを非ブロッキングに設定するだけです。Pythonが適切なフラグを設定する方法
を確認することに興味があるかもしれません。

于 2013-02-09T21:52:15.047 に答える