元の投稿の更新: 同僚が私が間違っていたことを指摘しました。他の方の参考になるかもしれないので、記事の最後に説明を記載します。
Python プログラムのネットワーク パフォーマンスの制限について基本的な理解を深めようとしていますが、異常に遭遇しました。コードフラグメント
while 1:
sock.sendto("a",target)
ホストが送信するのと同じ速さで UDP パケットをターゲット マシンに送信します。1 秒あたり 4000 パケットをわずかに超える送信レート、つまり 1 パケットあたり 250 us を測定しました。これは、python のようなインタープリター言語でも遅いようです (プログラムは 2 GHz AMD opteron、Linux、python バージョン 2.6.6 で実行されています)。私は、TCP の Python ではるかに優れたパフォーマンスを見てきました。
これをバックグラウンドで実行して top を実行すると、python が CPU の 25% しか使用していないことがわかります。これは、python が UDP パケットの送信を人為的に遅らせている可能性があることを示唆しています。
他の誰かが同様のことを経験しましたか? Python がパケット転送速度を制限しているかどうか、またこれをオフにする方法があるかどうかは誰にもわかりませんか?
ところで、同様の C++ プログラムは 1 秒あたり 200,000 をはるかに超えるパケットを送信できるため、プラットフォームや OS の本質的な制限ではありません。
それで、私はばかげた初心者の間違いを犯したことがわかりました。gethostbyname を明示的に呼び出すのを怠っていました。そのため、sendto コマンドのターゲット アドレスにシンボリック名が含まれていました。これにより、パケットが送信されるたびに名前解決がトリガーされていました。これを修正した後、約 120,000 p/s の最大送信レートを測定しました。ずっといい。