欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

php中pcntl_fork創(chuàng)建子進程的方法實例

 更新時間:2019年03月14日 09:45:23   作者:繁星落眼眶  
這篇文章主要介紹了php中pcntl_fork創(chuàng)建子進程的方法實例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

一、php中pcntl_fork函數概述

pcntl_fork()函數是php中用于創(chuàng)建子進程的一個函數,返回創(chuàng)建的子進程的pid。

該函數創(chuàng)建子進程具體fork的過程:

(1)調用該函數即創(chuàng)建一個子進程,創(chuàng)建成功父進程返回子進程的pid,子進程返回0;
(2)創(chuàng)建子進程實際上對父進程的一個拷貝,共享代碼空間,拷貝父進程的數據,也就是說父進程改變父進程的數據,子進程改變子進程的數據變量等;

二、示例代碼分析

代碼示例:

<?php
  $curr_pid = posix_getpid();//獲取當前的進程id
  
  //將當前進程的id寫入文件中
  echo '當前進程:'.$curr_pid.PHP_EOL;
  
  //開始創(chuàng)建子進程
  $son_pid = pcntl_fork();//返回子進程的id
 
  //查看當前進程
  echo '創(chuàng)建子進程之后當前的進程為:'.posix_getpid().PHP_EOL;
  
  //創(chuàng)建了子進程之后
  if($son_pid > 0){
    echo '子進程id:'.$son_pid.PHP_EOL;
  }

以上代碼執(zhí)行后結果為:

示例代碼分析:

(1)發(fā)現(xiàn)創(chuàng)建了子進程之后,系統(tǒng)會切換到子進程中,而子進程中的代碼是從含有pcntl_fork函數的那行執(zhí)行的
(2)創(chuàng)建子進程之后,子進程的代碼段是拷貝pcntl_fork函數及之后的代碼段,之前的代碼段并不拷貝,但是具體的數據變量子進程仍然會拷貝
(3)可見,fork之后程序會分叉執(zhí)行,即子進程執(zhí)行

三、pcntl_fork的業(yè)務場景舉例

  1. php的多進程中,常用pcntl_fork來實現(xiàn)并發(fā),多用于一些簡單工具的實現(xiàn)。
  2. 例如監(jiān)控工具,想要監(jiān)控幾個不同指標的情形,可以使用主進程監(jiān)控各指標的配置變化,然后對每個指標分別fork一個子進程來監(jiān)控其具體的情形,當主進程發(fā)現(xiàn)指標的配置改變則kill掉之前的子進程重新創(chuàng)建子進程進行監(jiān)控。
  3. 主進程進行業(yè)務分發(fā)操作,子進程進行具體的業(yè)務邏輯執(zhí)行。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

最新評論