illustrer
1. La file d'attente des messages est une file d'attente stockée en mémoire.
2. Puisqu'un seul processus peut accéder aux données dans la file d'attente des messages, aucun verrou ou sémaphore supplémentaire n'est nécessaire.
Exemple
echo "pid de progression parent :{$parentPid}n";$childList = array(); //Créer une file d'attente de messages et définir les types de messages (similaires aux bibliothèques dans les bases de données) $id = ftok(__FILE__,'m'); $msgQueue = msg_get_queue($id); constMSG_TYPE = 1 ; // fonction producteur producteur(){ globale $msgQueue ; $pid = posix_getpid(); $repeatNum = 5 ; pour ( $i = 1; $i <= $repeatNum; $i++) { $str = "({$pid})progression de la création ! {$i}"; msg_send($msgQueue,MSG_TYPE,$str); $rand = rand(1,3); dormir($rand); } } //Fonction consommateur consumer(){ globale $msgQueue ; $pid = posix_getpid(); $repeatNum = 6 ; pour ( $i = 1; $i <= $repeatNum; $i++) { $rel = msg_receive($msgQueue,MSG_TYPE,$msgType,1024,$message); echo "{$message} | consommateur({$pid}) destroy n"; $rand = rand(1,3); dormir($rand); } } fonction createProgress($callback){ $pid = pcntl_fork(); si ( $pid == -1) { //Échec de la création exit("erreur de progression du fork !n"); } sinon si ($pid == 0) { // Programme d'exécution de sous-processus $pid = posix_getpid(); $rappel(); exit("({$pid})fin de progression de l'enfant!n"); }autre{ //Le processus parent exécute le programme return $pid; } } // 3 processus d'écriture pour ($i = 0; $i < 3; $i ++ ) { $pid = createProgress('producteur'); $childList[$pid] = 1; echo "créer la progression de l'enfant producteur : {$pid} n" ; } // 2 processus d'écriture pour ($i = 0; $i < 2; $i ++ ) { $pid = createProgress('consommateur'); $childList[$pid] = 1; echo "créer la progression de l'enfant consommateur : {$pid} n" ; } // Attendez la fin de tous les processus enfants while(!empty($childList)){ $childPid = pcntl_wait($status); si ($childPid > 0){ unset($childList[$childPid]); } } echo "({$parentPid})fin de la progression principale !n" ;
Ce qui précède est une introduction à la file d'attente de messages PHP. J'espère que cela sera utile à tout le monde.