最近、2つのプロセス間で通信したいときに、(パイプ| - )を使用して問題が発生しました。 基本的に、子プロセスは親によっていっぱいになったSTDINを速く処理できませんでした。これにより、親はSTDINが解放されてゆっくり実行されるまで待つことになりました。子に書き込むときに親がブロックされないようにするにはどうすればよいですか?
STDINはどの程度の大きさで変更可能ですか?はいの場合は、ベストプラクティスのサイズはどのくらいですか?ここで
は、私が何を意味するか示すために、いくつかのコードサンプルです:このサンプルprocess_packet
より遅いanother_process_packet
で
if ($child_pid = open($child, "|-"))
{
$child->autoflush(1);
# PARENT process
while (1)
{
# Read packet from socket save in $packet
process_packet($packet);
# forward packet to child
print $child $packet;
}
}
else
{
die "Cannot fork: $!" unless defined $child_pid;
# CHILD process
my $line;
while($line = <STDIN>)
{
chomp $line;
another_process_packet($line);
}
}
。このようなコードを書く理由は、私は同じデータをソケットから取得し、実際に一度取得することです。
ありがとうございます。
プロデューサとコンシューマスクリプトの短縮版を投稿できますか? –
brain d foy、変更ありがとうございます。しかし、この多くの間違いを抱えることは恥ずかしいです... – Omid