nodejs多进程与php,PHP nodejs 多进程处理

class fork {

private $_pid = 0;

public function fork_child() {

$this->_pid = posix_getpid();

cli_set_process_title("LEARN FORK master process ". $this->_pid);   //设置进程标识

$childs = array(); //存放子进程ID

foreach(array(10,20,30) as $v) {  //模拟多任务

$child = $this->_fork($v); //创建子进程,并保存返回的子进程ID

$childs[$child] =  date("H:i:s", time());

}

$pid = pcntl_wait($status); //等待子进程,当前是假设有一个退出则全停的场景

if (isset($childs[$pid])) {

unset($childs[$pid]); //踢出执行完的子进程

foreach($childs as $child=>$date){

posix_kill($child, SIGTERM); //杀死兄弟进程

}

throw new Exception("子进程:".$pid. "异常");

}

}

protected function _fork($sleep) {

$pid = pcntl_fork();

if (0 > $pid) {

echo "fork failed";

} elseif ($pid > 0) {

return $pid;  //返回成功创建的子进程ID,父子进程拿到的PID是不一样的

} else {

//   if (posix_getppid() != $this->_pid)

//     throw new Exception("父进程异常");

cli_set_process_title("LEARN FORK child process ". posix_getpid(). " sleep ". $sleep);

sleep($sleep);

exit;

}

}

}

$fork = new fork();

$fork->fork_child();

如果是进程间通信的可以考虑使用posix_mkfifo函数,用文件,socket~ //多任务并行 var cluster = require('cluster');  //引入cluster模块, node是单进程单线程,要并行得借助第三方模块 var numCPUs = require('os').cpus().length; //获取CPU核数,做为进程数 if (cluster.isMaster) {     console.log('[master] ' + "start master...");     var workMap = [];     function forkWorker(env) {         var worker = cluster.fork(env); //可以环境变量{"PORT":XXX}         workMap[worker.id] = env; //保存fork的进程及环境变量     }     for (var i = 0; i < numCPUs; i++) {         forkWorker({"PROCESS":i}); //调用fork功能     }     cluster.on('exit', function(worker, code, signal) {         var env = workMap[worker.id]; //取回退出的进程环境变量         delete workMap[worker.id]; //删除已经退出的进程数据         if (worker.suicide === true) {             forkWorker(env); //正常退出拉起         }else {             forkWorker(env); //异常退出拉起         }     }) } else if (cluster.isWorker) {     console.log('[worker] ' + "start worker ..." + cluster.worker.id + " env-process"+ cluster.worker.process.env.PROCESS); }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值