程序linux下php多线程的妙用[基础]

php多线程  时间:2021-01-31  阅读:()

l inux下php多线程的妙用

开始用php写后台服务一段时间了.也是在这样的驱动下,不断的学习php语法,体验这一原来一直以为神秘且敬而远之的神奇语言的魅力.最初看php多线程的资料是为了提高程序的处理能力,充分发挥linux多任务的优势.不曾想多线程没用成反到是带来了一系列的意外收获.让之后的许多问题迎刃而解,不敢独享特一一道来.

本文所讲的东西是源自php的pcntl_fork函数.因为这个函数依赖操作系统fork的实现,所以本文所讲的东西只适用于linux/unix.ok,那么先看看这个函数的用法吧.php手册上是这么说的:

<?php

$pid = pcntl_fork() ;if ($pid == -1) {die('could not fork' ) ;

} else if ($pid) {

// we are the parentpcntl_wait($status) ; //Protect against Zombie children

} else {

// we are the child

}

?>

通过pcntl_fork创建一个子进程,如果返回值是-1的话,那么说明子进程创建失败.创建成功的进程id会返回给父进程,0返回给子进程.不好理解吧,费了很常时间明白以后,笔者习惯这样写:

<?php

$pid = pcntl_fork() ;if($pid == -1) {

//创建失败咱就退出呗,没啥好说的die('could not fork' ) ;

}else{if($pid) {

//从这里开始写的代码是父进程的,因为写的是系统程序,记得退出的时候给个返回值exit(0) ;

}else{

//从这里开始写的代码都是在新的进程里执行的,同样正常退出的话,最好也给一个返回值exit(0) ;

}

}

?>

这样一改好理解多了,如果你父进程希望知道子进程正常退出的话,可以加上前面的pcntl_wait.

函数的用法是整明白了,在实际的工作中有什么用处呢?

1.后台程序

命令行程序好写,服务程序也好写,笔者觉得这服务程序最难写.想想原来想在windows下写个服务啥的,又是要注册服务又是要这样那样的老费劲了.现在专职管理linux想让个命令行程序在后台运行,直接在命令后面加个&就搞定了.但是这样总觉得土.有了pcntl_fork突然发现世界是那么的美好.当主进程成功创建子进程并获得子进程的id以后,自己在临死前还不忘说一句:我已成功运行,我的id是:xxxx(子进程的id) ,完了还给系统返回个0(正常退出) ,哈哈,死都死的那么有尊严.

前面说的是程序常驻内存的情况,当然了这时候要注意内存的释放以及向日志文件打印信息,而不是往屏幕上(一打印信息程序就退出的哟) .还有一种情况是:程序被其它脚本调用,其它脚本只关心程序是不是正常运行,如果程序要运行很长时间才能运行完的话,最好不让脚本等待.这样的话pcntl_fork又派上用场了: )

2.延时处理.

有的时候,我们程序退出的时候要清理自身产生的东西,比如说要删除自己(当然了linux下面是可以删除正在运行的文件的,只是举个例子) ,这个时候就可以另起动一个进程,然后自己结束了,把事情交给另一个进程来做.当我们写服务程序的时候,我们肯定是写日志文件记录程序的运行情况(要不谁知道程序是不是在那睡大觉的:0) .程序正常退出的时候我们可以写一条日志说程序退出了,但是当程序收到linux下伟大的kill-9的时候,怎么记录自己的退出行为呢?额. . . . .这个和php的进程信号有关好像和这个没多大关系.

另一种情况:一个完善的程序一般都支持start, stop,restart这样的参数. start好说, stop也好说,既然start和stop都好说了,这个restart就先stop然后再start就可以了啊.额. . .好像又和pcntl_fork没多大关系,当你收到重启的信号总不能还是kill然后再start吧,是不是太黄太暴力了?还是温柔一点,让当前进程退出,让另外的进程再把它拉起来吧.在windows下想实现这一点似乎很困难呢,比如程序更新的时候,一般都是单写更新程序,或者程序退出的时候另起动一个批处理启动自己: )

3.不死进程

其实就是传说中的双进程了.早些年的时候万象网管为了达到不被恶意结束的目的用的就是这招了.虽然咱不用担心程序被人恶意停止,但是也保不齐主程序因为任务太重抗不住自己先挂了(这种情况也不是不会发生) .所以. . . . . .

转载于 http://www.phptarena.com/jishuwenzhang/113.html

Virmach($7.2/年)特价机器发放

在八月份的时候有分享到 Virmach 暑期的促销活动有低至年付12美元的便宜VPS主机,这不开学季商家又发布五款年付VPS主机方案,而且是有可以选择七个数据中心。如果我们有需要低价年付便宜VPS主机的可以选择,且最低年付7.2美元(这款目前已经缺货)。这里需要注意的,这次发布的几款便宜年付方案,会在2021年9月30日或者2022年4月39日,分两个时间段会将INTEL CPU迁移至AMD CP...

Raksmart:香港高防服务器/20Mbps带宽(cn2+bgp)/40G-100Gbps防御

RAKsmart怎么样?RAKsmart香港机房新增了付费的DDoS高防保护服务,香港服务器默认接入20Mbps的大陆优化带宽(电信走CN2、联通和移动走BGP)。高防服务器需要在下单页面的IP Addresses Option里面选择购买,分:40Gbps大陆优化高防IP-$461/月、100Gbps国际BGP高防IP-$692/月,有兴趣的可以根据自己的需求来选择!点击进入:RAKsmart官...

物语云-VPS-美国洛杉矶VPS无限流量云windows大带宽100M不限流量 26/月起

物语云计算怎么样?物语云计算(MonogatariCloud)是一家成立于2016年的老牌国人商家,主营国内游戏高防独服业务,拥有多家机房资源,产品质量过硬,颇有一定口碑。本次带来的是特惠活动为美国洛杉矶Cera机房的不限流量大带宽VPS,去程直连回程4837,支持免费安装Windows系统。值得注意的是,物语云采用的虚拟化技术为Hyper-v,因此并不会超售超开。一、物语云官网点击此处进入物语云...

php多线程为你推荐
手机内存卡数据恢复手机内存卡数据恢复骁龙750g和765g哪个好麒麟970跟骁龙730哪个更好帕萨特和迈腾哪个好2019帕萨特和迈腾哪个好?隔音怎么样?法兰绒和珊瑚绒哪个好珊瑚绒和法兰绒哪个暖和手动挡和自动挡哪个好手动挡车和自动挡的哪个好?网校哪个好请问在网校排名中,哪个网校是最好的?想找一家最好的来选择啊?oppo和vivo哪个好买oppo手机好还是vivo的好?清理手机垃圾软件哪个好清理手机垃圾文件的软件哪个好?qq空间登录不上为什么我登不进去QQ空间考生个人空间登录第一次登陆湖南省高等教育自学考试 考生个人空间就密码不对为什么
域名升级访问中 荷兰vps GGC edis 紫田 wordpress技巧 42u标准机柜尺寸 php空间购买 最好的qq空间 卡巴斯基免费试用 linux使用教程 怎么建立邮箱 web服务器搭建 国外在线代理服务器 lamp架构 网络速度 美国服务器 美国达拉斯 ddos攻击软件 更多