ASCII码 ASCII码

PHP基于进程控制函数实现多线程

发布于:2022-03-28 11:31:40  栏目:技术文档

这篇文章主要介绍了PHP基于进程控制函数实现多线程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

hp有一组进程控制函数(编译时需要–enable-pcntl与posix扩展),使得php能在nginx系统中实现跟c一样的创建子进程、使用exec函数执行程序、处理信号等功能。CentOS 6 下yum安装php的,默认是不安装pcntl的,因此需要单独编译安装,首先下载对应版本的php,解压后

  1. cd php-version/ext/pcntl
  2. phpize
  3. ./configure && make && make install
  4. cp /usr/lib/php/modules/pcntl.so /usr/lib64/php/modules/pcntl.so
  5. echo "extension=pcntl.so" >> /etc/php.ini
  6. /etc/init.d/httpd restart

方便极了。下面是示例代码:

  1. <?php
  2. header('content-type:text/html;charset=utf-8' );
  3. // 必须加载扩展
  4. if (!function_exists("pcntl_fork")) {
  5. die("pcntl extention is must !");
  6. }
  7. //总进程的数量
  8. $totals = 3;
  9. // 执行的脚本数量
  10. $cmdArr = array();
  11. // 执行的脚本数量的数组
  12. for ($i = 0; $i < $totals; $i++) {
  13. $cmdArr[] = array("path" => __DIR__ . "/run.php", 'pid' =>$i ,'total' =>$totals);
  14. }
  15. /*
  16. 展开:$cmdArr
  17. Array
  18. (
  19. [0] => Array
  20. (
  21. [path] => /var/www/html/company/pcntl/run.php
  22. [pid] => 0
  23. [total] => 3
  24. )
  25. [1] => Array
  26. (
  27. [path] => /var/www/html/company/pcntl/run.php
  28. [pid] => 1
  29. [total] => 3
  30. )
  31. [2] => Array
  32. (
  33. [path] => /var/www/html/company/pcntl/run.php
  34. [pid] => 2
  35. [total] => 3
  36. )
  37. )
  38. */
  39. pcntl_signal(SIGCHLD, SIG_IGN); //如果父进程不关心子进程什么时候结束,子进程结束后,内核会回收。
  40. foreach ($cmdArr as $cmd) {
  41. $pid = pcntl_fork(); //创建子进程
  42. //父进程和子进程都会执行下面代码
  43. if ($pid == -1) {
  44. //错误处理:创建子进程失败时返回-1.
  45. die('could not fork');
  46. } else if ($pid) {
  47. //父进程会得到子进程号,所以这里是父进程执行的逻辑
  48. //如果不需要阻塞进程,而又想得到子进程的退出状态,则可以注释掉pcntl_wait($status)语句,或写成:
  49. pcntl_wait($status,WNOHANG); //等待子进程中断,防止子进程成为僵尸进程。
  50. } else {
  51. //子进程得到的$pid为0, 所以这里是子进程执行的逻辑。
  52. $path = $cmd["path"];
  53. $pid = $cmd['pid'] ;
  54. $total = $cmd['total'] ;
  55. echo exec("/usr/bin/php {$path} {$pid} {$total}")."\n";
  56. exit(0) ;
  57. }
  58. }
  59. ?>

以上就是本文的全部内容,希望对大家的学习有所帮助。

相关推荐
阅读 +