Maison > Article > développement back-end > Communication par canal nommé multi-processus [processus non liés] Version PHP
Communication de processus :
1. Système d'interruption
2. Canal sans nom [communication semi-duplex]
ne peut être utilisé que pour le parent. -processus enfants , la communication entre les processus frères sans nom est appelée canal sans nom. Les données transmises ne sont pas formatées. Les deux parties peuvent définir elles-mêmes le format et ne s'appuient pas sur le système de fichiers.
Recommandation : "Tutoriel PHP"
3. Les canaux nommés
sont utilisés pour les opérations gênantes qui ne peuvent pas être réalisées par des canaux sans nom, même pour les processus. cela n'a rien à voir avec eux. Peut communiquer [il s'appuie sur un descripteur de fichier, mais ce fichier est un fichier de type FIFO, c'est-à-dire un fichier pipeline, et adhère au principe FIFO, c'est-à-dire que la file d'attente est la première entrée, premier sorti]
PS : Assurez-vous de comprendre le blocage des processus, le principe de non-blocage, le fichier pipeline, le processus [transfert d'état en cours d'exécution]
Exemples de scénarios d'application : Si vous utilisez l'API socket de PHP pour écrire un cadre réseau similaire à Workerman, vous pouvez effectuer un traitement unifié des événements de signal d'interruption
Le gestionnaire d'interruption est uniquement responsable de l'acceptation des demandes d'interruption et de l'écriture des données via l'extrémité d'écriture du canal. descripteur de fichier [événements lisibles]. Vous pouvez consulter en privé l'API liée au socket de flux et en savoir plus sur la fonction de multiplexage IO Comment utiliser】Reprocess. Le gestionnaire d’interruption ne restera pas à attendre trop longtemps.
Bien sûr, la communication entre les processus multilingues peut également être réalisée via des canaux nommés.
$filePath = $argv[1]; if (posix_mkfifo($filePath,0666)<0){ fprintf(STDOUT,"命名管道创建错误"); exit(0); } $fd = fopen($filePath,"w"); while (is_resource($fd)){ fprintf(STDOUT,">"); $data = fgets(STDIN); if ($data){ fwrite($fd,$data,strlen($data)); } } exit(0);rrree
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!