Récemment, j'ai eu un problème en utilisant (pipe | -) quand je voulais communiquer entre deux processus. Fondamentalement, le processus enfant ne pouvait pas traiter STDIN aussi vite qu'il était rempli par le parent. Cela a amené le parent à attendre que STDIN soit libre et l'ait ralenti.Comment puis-je empêcher le parent de bloquer en écrivant à un enfant?
Quelle est la taille maximale de STDIN et est-il possible de le modifier? Si oui, quelle est la taille de la meilleure pratique?
Voici quelques exemple de code pour montrer ce que je veux dire:
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);
}
}
Dans cet exemple another_process_packet
plus lent que process_packet
. La raison pour laquelle j'écris le code comme ceci est, je veux utiliser les mêmes données vient du socket et l'obtenir une fois.
Merci d'avance.
Pourriez-vous poster des versions raccourcies de vos scripts de producteur et de consommateur? –
cerveau d foy, merci pour les changements. C'est un peu embarrassant d'avoir autant d'erreurs ... – Omid