ilustrar
1. La cola de mensajes es una cola almacenada en la memoria.
2. Dado que solo un proceso puede acceder a los datos en la cola de mensajes, no se necesitan bloqueos ni semáforos adicionales.
Ejemplo
echo "pid de progreso del padre:{$parentPid}n";$childList = array(); //Crea una cola de mensajes y define tipos de mensajes (similar a las bibliotecas en bases de datos) $id = ftok(__FILE__,'m'); $msgQueue = msg_get_queue($id); constante MSG_TYPE = 1; // función de productor productor(){ global $msgQueue; $pid = posix_getpid(); $númerorepetición = 5; para ( $i = 1; $i <= $repeatNum; $i++) { $cadena = "({$pid})creación de progreso! {$i}"; msg_send($msgQueue,MSG_TYPE,$cadena); $rand = rand(1,3); dormir ($ rand); } } //Función de consumidor consumidor(){ global $msgQueue; $pid = posix_getpid(); $númerorepetición = 6; para ( $i = 1; $i <= $repeatNum; $i++) { $rel = msg_receive($msgQueue,MSG_TYPE,$msgType,1024,$mensaje); echo "{$mensaje} | consumidor({$pid}) destruir n"; $rand = rand(1,3); dormir ($ rand); } } función crearProgreso($devolución de llamada){ $pid = pcntl_fork(); si ($pid == -1) { // Error en la creación exit("¡error de progreso de la bifurcación!n"); } si no ($pid == 0) { // Programa de ejecución de subprocesos $pid = posix_getpid(); $devolución de llamada(); exit("({$pid})¡fin del progreso del niño!n"); }demás{ //El proceso padre ejecuta el programa return $pid; } } // 3 procesos de escritura para ($i = 0; $i < 3; $i ++ ) { $pid = createProgress('productor'); $childList[$pid] = 1; echo "crear progreso hijo productor: {$pid} n"; } // 2 procesos de escritura para ($i = 0; $i < 2; $i ++ ) { $pid = createProgress('consumidor'); $childList[$pid] = 1; echo "crear progreso secundario del consumidor: {$pid} n"; } // Espera a que finalicen todos los procesos secundarios while(!empty($childList)){ $childPid = pcntl_wait($estado); si ($childPid > 0){ unset($childList[$childPid]); } } echo "({$parentPid})¡fin del progreso principal!n";
Lo anterior es una introducción a la cola de mensajes PHP. Espero que sea útil para todos.