Проверьте, если труба пуста, прежде чем писать
Я унаследовал Perl-программу, которая открывает канал для другой программы:
open(CONSUMER, "|/bin/consumer >> logfile 2>&1") ||
die "Comsumer open fail\n";
select(CONSUMER); $| = 1;
и затем многократно пишет в этот канал в цикле:
while (<INPUT>) {
$command=$_;
...
# is CONSUMER empty?
print CONSUMER $command;
}
Кажется, что куча этих команд буферизируется в буфере канала. Это монополизирует услугу, которую использует ПОТРЕБИТЕЛЬ. В какой-то момент это:
select(undef, undef, undef, 0.1);
был добавлен в конец петли как (не очень эффективный) бандит.
Кажется, что было бы наиболее эффективным, если бы была возможность проверки перед print
чтобы убедиться, что буфер трубы пуст, прежде чем продолжить print
,
Это вообще возможно?