gpt4 book ai didi

linux - Linux 中 Perl 的系统读取开销

转载 作者:太空宇宙 更新时间:2023-11-04 09:06:21 25 4
gpt4 key购买 nike

我有一个网络守护进程,它在 TCP 套接字上接收固定长度(44 字节)的消息。

我正在尝试确定我应该使用 sysread 读取的最佳字节长度是多少。我当然可以做一个循环来执行 44 字节的 sysread,但我想提出一个最佳大小。

我可以看到不用说 1 兆字节的数据来执行 substr 的好处,但我也可以看到为什么执行一千次 sysread 调用会导致速度变慢。

在公共(public)互联网上执行 sysreads 是否有合适的大小建议?

编辑:该脚本获取了一堆 44 字节的消息,它们在排队。

最佳答案

越大越好! sysread 将在任何字节可用时立即返回。

因为您永远无法保证获得完整的消息,并且因为您永远无法保证不会收到超过一条消息,所以您需要在 Perl 端有一个循环。由于您在 Perl 端已经有一个循环,因此您不妨一次从系统中获取尽可能多的数据,以避免不必要的系统调用。

use constant READ_SIZE => 65*1024;

my $buf = '';
while (1) {
my $rv = sysread($fh, $buf, READ_SIZE, length($buf));
die if !defined($rv);
last if !$rv;

while ($buf =~ s/^(.{44})//s) {
my $msg = $1;
process_msg($msg);
}
}

选择一个大小并监控 $buf 的大小。如果它经常接近 READ_SIZE,请增加 READ_SIZE

关于linux - Linux 中 Perl 的系统读取开销,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10423187/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com