veranschaulichen
1. Die Nachrichtenwarteschlange ist eine im Speicher gespeicherte Warteschlange.
2. Da nur ein Prozess auf die Daten in der Nachrichtenwarteschlange zugreifen kann, sind keine zusätzlichen Sperren oder Semaphoren erforderlich.
Beispiel
echo "parent progress pid:{$parentPid}n";$childList = array(); //Eine Nachrichtenwarteschlange erstellen und Nachrichtentypen definieren (ähnlich wie Bibliotheken in Datenbanken) $id = ftok(__FILE__,'m'); $msgQueue = msg_get_queue($id); const MSG_TYPE = 1; // Produzentenfunktion Producer(){ globale $msgQueue; $pid = posix_getpid(); $repeatNum = 5; for ( $i = 1; $i <= $repeatNum; $i++) { $str = "({$pid})progress create! {$i}"; msg_send($msgQueue,MSG_TYPE,$str); $rand = rand(1,3); schlafen($rand); } } //Verbraucherfunktion Consumer(){ globale $msgQueue; $pid = posix_getpid(); $repeatNum = 6; for ( $i = 1; $i <= $repeatNum; $i++) { $rel = msg_receive($msgQueue,MSG_TYPE,$msgType,1024,$message); echo "{$message} | Consumer({$pid}) destroy n"; $rand = rand(1,3); schlafen($rand); } } Funktion createProgress($callback){ $pid = pcntl_fork(); if ( $pid == -1) { //Erstellung fehlgeschlagen exit("Fork-Fortschrittsfehler!n"); } else if ($pid == 0) { // Unterprozess-Ausführungsprogramm $pid = posix_getpid(); $callback(); exit("({$pid})child progress end!n"); }anders{ //Der übergeordnete Prozess führt das Programm aus return $pid; } } // 3 Schreibvorgänge für ($i = 0; $i < 3; $i ++ ) { $pid = createProgress('producer'); $childList[$pid] = 1; echo "Producer-Child-Fortschritt erstellen: {$pid} n"; } // 2 Schreibvorgänge für ($i = 0; $i < 2; $i ++ ) { $pid = createProgress('consumer'); $childList[$pid] = 1; echo "Fortschritt zum Erstellen eines Consumer-Kinds: {$pid} n"; } // Warten, bis alle untergeordneten Prozesse beendet sind while(!empty($childList)){ $childPid = pcntl_wait($status); if ($childPid > 0){ unset($childList[$childPid]); } } echo "({$parentPid})main progress end!n";
Das Obige ist eine Einführung in die PHP-Nachrichtenwarteschlange. Ich hoffe, es wird für alle hilfreich sein.