แสดงให้เห็น
1. คิวข้อความเป็นคิวที่จัดเก็บไว้ในหน่วยความจำ
2. เนื่องจากมีเพียงกระบวนการเดียวเท่านั้นที่สามารถเข้าถึงข้อมูลในคิวข้อความ จึงไม่จำเป็นต้องล็อกหรือเซมาฟอร์เพิ่มเติม
ตัวอย่าง
echo "ความคืบหน้าของผู้ปกครอง pid:{$parentPid}n";$childList = array(); //สร้างคิวข้อความและกำหนดประเภทข้อความ (คล้ายกับไลบรารีในฐานข้อมูล) $id = ftok(__FILE__,'m'); $msgQueue = msg_get_queue($id); const MSG_TYPE = 1; // ฟังก์ชั่นผู้ผลิต โปรดิวเซอร์ () { $msgQueue ทั่วโลก; $pid = posix_getpid(); $repeatNum = 5; สำหรับ ( $i = 1; $i <= $repeatNum; $i++) { $str = "({$pid})ความคืบหน้าในการสร้าง! {$i}"; msg_send($msgQueue,MSG_TYPE,$str); $แรนด์ = แรนด์(1,3); นอนหลับ($แรนด์); - - //ฟังก์ชันผู้บริโภค Consumer(){ $msgQueue ทั่วโลก; $pid = posix_getpid(); $repeatNum = 6; สำหรับ ( $i = 1; $i <= $repeatNum; $i++) { $rel = msg_receive($msgQueue,MSG_TYPE,$msgType,1024,$ข้อความ); echo "{$message} | Consumer({$pid}) ทำลาย n"; $แรนด์ = แรนด์(1,3); นอนหลับ($แรนด์); - - ฟังก์ชั่น createProgress($ โทรกลับ) { $pid = pcntl_fork(); ถ้า ( $pid == -1) { //การสร้างล้มเหลว exit("ข้อผิดพลาดความคืบหน้าของส้อม!n"); } อื่นถ้า ($pid == 0) { // โปรแกรมประมวลผลย่อย $pid = posix_getpid(); $โทรกลับ(); exit("({$pid})ความคืบหน้าลูกสิ้นสุด!n"); }อื่น{ // กระบวนการหลักดำเนินการโปรแกรมส่งคืน $pid; - - // 3 กระบวนการเขียนสำหรับ ($i = 0; $i < 3; $i ++ ) { $pid = createProgress('ผู้ผลิต'); $รายการเด็ก[$pid] = 1; echo "สร้างความคืบหน้าลูกของผู้ผลิต: {$pid} n"; - // 2 กระบวนการเขียนสำหรับ ($i = 0; $i < 2; $i ++ ) { $pid = createProgress('ผู้บริโภค'); $รายการเด็ก[$pid] = 1; echo "สร้างความคืบหน้าของผู้บริโภค: {$pid} n"; - // รอให้กระบวนการย่อยทั้งหมดสิ้นสุดในขณะที่(!empty($childList)){ $childPid = pcntl_wait($สถานะ); ถ้า ($childPid > 0){ unset($childList[$childPid]); - - echo "({$parentPid})ความคืบหน้าหลักสิ้นสุด!n";
ข้างต้นนี้เป็นการแนะนำคิวข้อความ PHP ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน