PHP 并发技术详解
来源:互联网 发布:网络教育一年学费多少 编辑:程序博客网 时间:2024/04/26 04:08
主要是pcntl和popen
高负载处理--“三剑客”:
缓存、缓冲、并发
1.使用PCNTL扩展:
process control
主要使用pcntl_fork函数和pcntl_waitpid函数
注明:pcntl_fork(手册介绍:http://php.net/manual/en/function.pcntl-fork.php)起进程起来并发处理,然后底层做了测试,效果也还不错,但是当通过apache调用的时候却无法运行。然后看到了pcntl_fork手册有下面一句:
It is not possible to use the function 'pcntl_fork' when PHP is used as Apache module. You can only use pcntl_fork in CGI mode or from command-line.
2.使用popen
popen — 打开进程文件指针
希望本文对广大php开发者有所帮助,感谢您阅读本文。如果您想要了解更多有关php技术问题欢迎加群探讨:304224365 ,验证码:csl,不写验证不予通过。
高负载处理--“三剑客”:
缓存、缓冲、并发
1.使用PCNTL扩展:
process control
主要使用pcntl_fork函数和pcntl_waitpid函数
<?phpfunction performSomeFunction($n, &$ret){$pid = getmypid();echo "this is in {$pid}.{$n}\n";usleep(500000);$ret[$pid] = array($pid);exit(0);}$i = 0;$starttime = microtime(TRUE);$pid_arr = array();$ret_arr = array();$num = intval($argv[1]);echo $num."\n";while ($i < $num){$pid = pcntl_fork();if ($pid == -1){die('could not fork');}else{if ($pid) // parent{$pid_arr[$i] = $pid;}else // child{performSomeFunction($i+1, $ret_arr);}}$i++;}while(count($pid_arr) > 0){$myId = pcntl_waitpid(-1, $status, WNOHANG);foreach ($pid_arr as $key => $pid){if ($myId == $pid)unset($pid_arr[$key]);}usleep(100);}$elapsed = microtime(TRUE) - $starttime;print "\n==> total elapsed: " . sprintf("%f secs.\n", $elapsed);?>
注明:pcntl_fork(手册介绍:http://php.net/manual/en/function.pcntl-fork.php)起进程起来并发处理,然后底层做了测试,效果也还不错,但是当通过apache调用的时候却无法运行。然后看到了pcntl_fork手册有下面一句:
It is not possible to use the function 'pcntl_fork' when PHP is used as Apache module. You can only use pcntl_fork in CGI mode or from command-line.
2.使用popen
popen — 打开进程文件指针
<?php$num = intval($argv[1]);$i = 0;$retArr = array();$generateNumberArr = array();while ($i++ < $num) {$generateNumberArr[$i] = popen("/home/users/gino/apps/php5/bin/php /home/users/gino/test/pcntl/one.php " .$i, 'r');}foreach ($generateNumberArr as $generateNumberArr_k =>$generateNumberArr_v) {$str = '';while (! feof($generateNumberArr_v)) {$str .= fgets($generateNumberArr_v, 4096);}$retArr[] = $str;pclose($generateNumberArr_v);}var_dump($retArr);?>
希望本文对广大php开发者有所帮助,感谢您阅读本文。如果您想要了解更多有关php技术问题欢迎加群探讨:304224365 ,验证码:csl,不写验证不予通过。
- PHP 并发技术详解
- php缓存技术详解
- PHP缓存技术详解
- php缓存技术详解
- php缓存技术详解
- php缓存技术详解
- php缓存技术详解
- PHP分页技术详解
- PHP分页技术详解
- php 高并发 前端 CDN技术原理及配置
- 并发技术
- PHP内存缓存技术memcached详解
- PHP缓存技术:memcache函数详解之一
- PHP缓存技术:memcache函数详解之一
- PHP企业级应用缓存技术详解
- PHP的数据库接口和技术详解
- PHP并发
- PHP缓存技术:memcache函数详解之二
- KinsomC个人博客
- Codility -- Frog-River-One
- flv文件插入到网页中播放
- 手机助手源码开发定制 类似91.360手机助手
- 手机型号识别 手机PID UID 驱动识别 数据库包
- PHP 并发技术详解
- Jquery 语法实例
- xCode5.0使用iOS6.1SDK及模拟器
- ubuntn系统的语言切换 就是用Ctrl+ spacew切换语言栏
- 3.7 《硬啃设计模式》 第16章 老掉牙系统的重生 - 适配器模式(Adapter Pattern)
- struts2 的配置文件DTD
- Python基础08 面向对象的基本概念
- ubuntu12.04+nginx+fastcg+php5+mysql配置
- hdu-1197-Specialized Four-Digit Numbers