PHP系统编程--01.多进程与多线程
来源:互联网 发布:linux串口登陆 编辑:程序博客网 时间:2024/06/05 08:27
PHP中提供了一个扩展pcntl,可以利用操作系统的fork调用来实现多进程。fork调用后执行的代码将是并行的。
PHP官方没有提供多线程的扩展,pecl中有一个pthreads扩展提供了多线程的特性,地址是http://pecl.php.net/package/pthreads,此扩展仅在线程安全版本中可用。
多进程
- 使用多进程, 子进程结束以后, 内核会负责回收资源
- 使用多进程, 子进程异常退出不会导致整个进程Thread退出. 父进程还有机会重建流程.
- 一个常驻主进程, 只负责任务分发, 逻辑更清楚.
- 多进程方式更加稳定,另外利用进程间通信(IPC)也可以实现数据共享。
- 共享内存,这种方式和线程间读写变量是一样的,需要加锁,会有同步、死锁问题。
- 消息队列,可以采用多个子进程抢队列模式,性能很好
多线程
- 线程是在同一个进程内的,可以共享内存变量实现线程间通信
- 线程比进程更轻量级,开很大量进程会比线程消耗更多系统资源
多线程也存在一些问题:
- 线程读写变量存在同步问题,需要加锁
- 锁的粒度过大存在性能问题,可能会导致只有1个线程在运行,其他线程都在等待锁
- 同时使用多个锁,逻辑复杂,一旦某个锁没被正确释放,可能会发生线程死锁
- 某个线程发生致命错误会导致整个进程崩溃
php搭建pcntl
在PHP中进程控制支持默认是关闭的。您需要使用 –enable-pcntl 配置选项重新编译PHP来打开进程控制支持。注:pcntl只支持Linux版本
##本例用的php版本的是5.3.3,
cd php-5.3.3/ext/pcntl
phpize
./configure --with-php-config=/usr/local/bin/php-config
make
make isntall
在php.ini下加入pcntl.so
即可
extension=pcntl.so
代码演示
现在我们通过 pcntl扩展来调用操作系统的fork实现多进程。fork调用后执行的代码将是并行的。
<?php
$pid = pcntl_fork();
if($pid > 0){
echo "parent\n";
}elseif($pid == 0){
echo "child\n";
}else{
echo "error\n";
}
参考地址:
http://php.net/manual/zh/book.pcntl.php
http://www.laruence.com/2009/06/11/930.html
来源:http://www.cnblogs.com/linzhenjie/p/5485419.html
阅读全文
0 0
- PHP系统编程--01.多进程与多线程
- PHP中的(伪)多线程与多进程
- PHP中的(伪)多线程与多进程
- php的多进程与多线程
- Linux的多进程与多线程编程
- Perl 多进程与多线程编程
- 多线程与多进程编程学习整理
- 高性能服务器编程-多进程编程与多线程编程
- PHP实现系统编程(二) --- 多进程编程介绍及孤儿进程、僵尸进程
- [转]PHP中的(伪)多线程与多进程
- [转]PHP中的(伪)多线程与多进程
- PHP多进程编程
- PHP多进程编程
- PHP多进程编程
- PHP多进程编程
- php 多进程编程
- php 多进程编程
- 多线程与多进程
- RF常用库及安装方法
- JDK9 之模块化
- linux内核段错误之寄存器回溯
- 跟vczh看实例学编译原理
- 【原创】如何使用build.gradle优雅的开发Android
- PHP系统编程--01.多进程与多线程
- 轮播图
- MyBatis逆向工程实例
- 关于<c:set value="${pageContext.request.contextPath}" var="path" scope="page"/>
- webpack加载image
- wordpress优化提速:去除不必要的元素标签
- 前端服务器优化之设置max-age和gzip(express)
- Android SeekBar类
- java 生成xml