Maison > développement back-end > tutoriel php > Communication par canal nommé multi-processus [processus non liés] Version PHP

Communication par canal nommé multi-processus [processus non liés] Version PHP

藏色散人
Libérer: 2023-04-07 17:32:01
avant
2346 Les gens l'ont consulté

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);
Copier après la connexion
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!

Étiquettes associées:
php
source:learnku.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal