国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > PHP > 正文

PHP多進程通信-消息隊列使用

2024-05-05 00:07:16
字體:
來源:轉載
供稿:網友

向消息隊列發送數據和獲取數據的測試

<?php$key=ftok(__FILE__,'a');//獲取消息隊列$queue=msg_get_queue($key,0666);//發送消息//msg_send($queue, 1, "Hello, 1");//接收消息,如果接收不到會阻塞msg_receive($queue, 1, $message_type, 1024, $message1);//移除消息//msg_remove_queue($queue);//var_dump($message1);

PHP,多進程,通信,消息隊列

<?php/** * 這段代碼模擬了一個日常的任務。 * 第一個父進程產生了一個子進程。子進程又作為父進程,產生10個子進程。 * 可以簡化為A -> B -> c,d,e... 等進程。 * 作為A來說,只需要生產任務,然后交給B 來處理。B 則會將任務分配給10個子進程來進行處理。 *  *///設定腳本永不超時set_time_limit(0);$ftok = ftok(__FILE__, 'a');$msg_queue = msg_get_queue($ftok);$pidarr = []; //產生子進程$pid = pcntl_fork();if ($pid) { //父進程模擬生成一個特大的數組。 $arr = range(1,100000); //將任務放進隊里,讓多個子進程并行處理 foreach ($arr as $val) {  $status = msg_send($msg_queue,1, $val);  usleep(1000); }  $pidarr[] = $pid; msg_remove_queue($msg_queue);} else { //子進程收到任務后,fork10個子進程來處理任務。 for ($i =0; $i<10; $i++) {  $childpid = pcntl_fork();  if ($childpid) {   $pidarr[] = $childpid; //收集子進程processid  } else {   while (true) {    msg_receive($msg_queue, 0, $msg_type, 1024, $message);    if (!$message) exit(0);    echo $message.PHP_EOL;    usleep(1000);   }   }  } }//防止主進程先于子進程退出,形成僵尸進程while (count($pidarr) > 0) { foreach ($pidarr as $key => $pid) {  $status = pcntl_waitpid($pid, $status);  if ($status == -1 || $status > 0) {   unset($pidarr[$key]);  }  }  sleep(1);}

PHP,多進程,通信,消息隊列

以上所述是小編給大家介紹的PHP通信-消息隊列使用詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VeVb武林網網站的支持!


注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 华阴市| 航空| 深州市| 临朐县| 布拖县| 巫山县| 阳春市| 宿州市| 吉隆县| 普兰店市| 石门县| 前郭尔| 和顺县| 沧州市| 扎鲁特旗| 兴和县| 凤城市| 兰州市| 龙井市| 乌拉特后旗| 新泰市| 晋城| 临高县| 呼玛县| 东明县| 昌都县| 读书| 九江县| 修文县| 措勤县| 儋州市| 永善县| 曲水县| 绵阳市| 英山县| 天镇县| 钟山县| 武鸣县| 左云县| 墨竹工卡县| 榆树市|