
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.