pcntl_fork
官方文档摘录:
1 (PHP 4 >= 4.1.0, PHP 5, PHP 7) 3 pcntl_fork — 在当前进程当前位置产生分支(子进程)。译注:fork是创建了一个子进程,父进程和子进程 都从fork的位置开始向下继续执行,不同的是父进程执行过程中,得到的fork返回值为子进程 号,而子进程得到的是0。 4 5 说明 6 pcntl_fork ( void ) : int 7 pcntl_fork()函数创建一个子进程,这个子进程仅PID(进程号) 和PPID(父进程号)与其父进程不同。fork怎样在您的系统工作的详细信息请查阅您的系统 的fork(2)手册。 8 9 返回值 10 成功时,在父进程执行线程内返回产生的子进程的PID,在子进程执行线程内返回0。失败时,在 父进程上下文返回-1,不会创建子进程,并且会引发一个PHP错误。 11 12 范例 13 Example #1 pcntl_fork() 示例 15 <?php 16 17 $pid = pcntl_fork(); 18 //父进程和子进程都会执行下面代码 19 if ($pid == -1) { 20 //错误处理:创建子进程失败时返回-1. 21 die('could not fork'); 22 } else if ($pid) { 23 //父进程会得到子进程号,所以这里是父进程执行的逻辑 24 pcntl_wait($status); //等待子进程中断,防止子进程成为僵尸进程。 25 } else { 26 //子进程得到的$pid为0, 所以这里是子进程执行的逻辑。 27 } 28 29 ?>
如果循环调用的,按照文档内容: 在当前进程当前位置产生分支.
那么for循环下thread关系为:
简单定义如下
PT: parent thread.
ST: son thread.
pcntl_fork总是会生成一个父子成对的进程来执行。
那么循环的次数决定运行中产生总的进程数为: 2^n。比如循环3,那么总的进程数为: 2^3 = 8。
因为成对出现的特性,那么父子进程各为: 2^n/2。比如循环3,那么子进程数为: 2^3/2 = 4。
标签:fork,PHP,函数,thread,数为,进程,pcntl,php From: https://www.cnblogs.com/supermarx/p/16591204.html