私は、TCPソケット上で固定長(44バイト)のメッセージを受け取るネットワークデーモンを持っています。LinuxのPerlのsysreadオーバーヘッド
私はsysreadで読んでいるはずのバイト単位の最適な長さを判断しようとしています。私はもちろん44バイトのsysreadを行うループを行うことができますが、私は最適なサイズを考え出したいと思います。
substrを実行するために1メガバイト分のデータがないという利点がありますが、何千ものsysread呼び出しを行うと速度が遅くなることもわかります。
公衆インターネット経由でsysreadを実行するための推奨サイズはありますか?
編集: スクリプトは、44バイトのメッセージの束を取得し、キューに入れられます。
ベンチマークを行った後、これが私のアプリケーションの正解であるようです。 – GoldenNewby
@GoldenNewbyもちろん、Perlにバッファリング自体をさせる(つまり、 'sysread'の代わりに' read''を使って)、おそらくもっと速くなります!私は、 'sysread'が使われるというあなたの前提を盲目的に受け入れました。 – ikegami
http://www.perlmonks.org/?node_id=435814、その議論では、「読んでもファイルの最後を除いてそれをすることはできません」と述べています。 TCPソケットから読み込むという文脈では、それはどういう意味ですか?私は部分的な結果を返すことで大丈夫ですが、一定のバイト数を取得しようとしている間に待つ必要はありません。ノンブロッキング読み出しが可能ですか? – GoldenNewby