menjelaskan
1. Antrian pesan adalah antrian yang tersimpan di memori.
2. Karena hanya satu proses yang dapat mengakses data dalam antrian pesan, tidak diperlukan kunci atau semaphore tambahan.
Contoh
echo "kemajuan induk pid:{$parentPid}n";$childList = array(); //Membuat antrian pesan dan menentukan tipe pesan (mirip dengan perpustakaan di database) $id = ftok(__FILE__,'m'); $msgQueue = pesan_get_queue($id); konstanta MSG_TYPE = 1; // fungsi produser produser(){ global $msgQueue; $pid = posix_getpid(); $repeatNum = 5; untuk ( $i = 1; $i <= $repeatNum; $i++) { $str = "({$pid}) kemajuan yang dibuat! {$i}"; msg_send($msgQueue,MSG_TYPE,$str); $rand = acak(1,3); tidur($rand); } } //Fungsi konsumen konsumen(){ global $msgQueue; $pid = posix_getpid(); $repeatNum = 6; untuk ( $i = 1; $i <= $repeatNum; $i++) { $rel = msg_receive($msgQueue,MSG_TYPE,$msgType,1024,$message); echo "{$message} | konsumen({$pid}) hancurkan n"; $rand = acak(1,3); tidur($rand); } } fungsi createProgress($panggilan balik){ $pid = pcntl_fork(); jika ( $pid == -1) { //Pembuatan gagal keluar("kesalahan progres fork!n"); } lain jika ($pid == 0) { // Program eksekusi subproses $pid = posix_getpid(); $panggilan balik(); exit("({$pid})progres anak berakhir!n"); }kalau tidak{ //Proses induk mengeksekusi program return $pid; } } // 3 proses penulisan untuk ($i = 0; $i < 3; $i ++ ) { $pid = createProgress('produser'); $daftaranak[$pid] = 1; echo "buat progres anak produser: {$pid} n"; } // 2 proses penulisan untuk ($i = 0; $i < 2; $i ++ ) { $pid = createProgress('konsumen'); $daftaranak[$pid] = 1; echo "buat kemajuan anak konsumen: {$pid} n"; } // Tunggu hingga semua proses turunan selesai while(!empty($childList)){ $childPid = pcntl_wait($status); jika ($anakPid > 0){ tidak disetel($DaftarAnak[$AnakPid]); } } echo "({$parentPid})progres utama telah selesai!n";
Di atas adalah pengenalan antrian pesan PHP. Saya harap dapat bermanfaat bagi semua orang.