内容简介:PHP提供了一个Pcntl扩展,Pcntl基于Linux的进程,Windows系统暂时没有这个扩展,用于实现基础的多进程实现,可以利用这个处理一个很耗时的任务,例如发订阅邮件,短信,站内信等。参考链接:
PHP提供了一个Pcntl扩展,Pcntl基于 Linux 的进程,Windows系统暂时没有这个扩展,用于实现基础的多进程实现,可以利用这个处理一个很耗时的任务,例如发订阅邮件,短信,站内信等。
参考链接:
http://php.net/manual/zh/ref....
http://php.net/manual/zh/ref....
http://blog.csdn.net/huyanpin...
http://rango.swoole.com/archi...
https://www.lvtao.net/dev/php...
示例代码:
代码是基于 Laravel 框架的,建议使用此框架来允许这部分代码。
public function index(Request $request)
{
pcntl_signal(SIGCHLD, SIG_IGN); //如果父进程不关心子进程什么时候结束,子进程结束后,内核会回收。
$max = 8000;
$workers = 10;
$pids = array();
for($i = 0; $i < $workers; $i++){
$pids[$i] = pcntl_fork();
$pid = posix_getpid();
switch ($pids[$i]) {
case -1:
echo "fork error : {$i} \r\n";
exit;
case 0:
$param = array(
'lastid' => $max / $workers * $i,
'maxid' => $max / $workers * ($i+1),
);
$this->doSomething($pid, $param);
exit;
default:
break;
}
}
foreach ($pids as $i => $pid) {
if($pid) {
//父进程会得到子进程号,所以这里是父进程执行的逻辑
//如果不需要阻塞进程,而又想得到子进程的退出状态,则可以注释掉pcntl_wait($status)语句,或写成:
pcntl_wait($status,WNOHANG); //等待子进程中断,防止子进程成为僵尸进程。
//pcntl_waitpid($pid, $status);
}
}
}
// 可以看到那个子进程在处理哪些数据
public function doSomething($filename, $param)
{
for ($i = $param['lastid']; $i < $param['maxid']; $i++) {
$path = "./test/";
if (!is_dir($path)){
mkdir($path, 0777, true);
}
$content = $i . '|';
$file = $path . $filename . ".txt";
file_put_contents($file, $content, FILE_APPEND);
}
}
更多建议读文档,进程和线程,还有很多内容的,需要读书去学习了
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Linux 端 Firefox 63 扩展程序将默认独立进程
- 进程:进程生命周期
- Python 知识巩固:通过主进程带起多个子进程实现多进程执行逻辑
- Python 中子进程与父进程
- 什么是僵尸进程,如何找到并杀掉僵尸进程?
- Python第十二章-多进程和多线程01-多进程
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
现代应用数学手册
《现代应用数学手册》编委会 / 清华大学出版社 / 2005-1-1 / 48.00元
本书是进行科学计算的常备工具书,内容新颖,查阅方便,实用性强。主要介绍生产、科研、管理、数学等实践中在计算机上使用的各种计算方法和技巧。全书分为14章,依次为数值计算概论、插值法、函数逼近与曲线拟合、数值积分与数值微分、方程求根、线性方程组的直接解法和迭代解法、矩阵特征值问题、非线性方程组数值解与最优化方法、常微分方程初值问题和边值问题的数值解法、偏微分方程的数值解法、多重网络法和积分方程数值解法......一起来看看 《现代应用数学手册》 这本书的介绍吧!