在一个worker的onworkerstart区间又new了其他的worker,那么内部worker执行若是卡住了,会否影响到最外worker?

$worker = new Worker('tcp://0.0.0.0:9090'); 
//启动1个进程对外提供服务
$worker -> count = 1;
Worker::$daemonize = true;
Worker::$stdoutFile = '/tmp/stdout.log';
//增加一个属性
$worker -> uidConnections = array();//c++客户端信息
$worker -> onWorkerStart = function($worker){
$alarm = new Alarm();//这是新开了另一个worker
$alarm -> start();
$allLine = new AllLine();//这是新开了另一个worker

$allLine -> start();

$worker -> onConnect = function($connection){
global $worker;
$ip = $connection -> getRemoteIp();
$id = $connection -> id;
$worker -> uidConnections[$ip] = $connection;
$GLOBALS['DealStream_timeId'][$id] = Timer::add(0.001,array('DealData','dealSream'),array($id, $connection),true);//隔1ms处理一次stream
};
$worker -> onMessage = function($connection,$datas){
//#考虑校验
$GLOBALS['streamlen'] += strlen($datas);
$id = $connection -> id;
if(!isset($GLOBALS['stream'][$id])){
$GLOBALS['stream'][$id] = $datas;
}else{
$GLOBALS['stream'][$id] .= $datas;//接收流到缓冲区
}
};
如上,新开的两个worker如果业务比较慢,会否影响最外层worker的接收数据?里面两个算是子进程吗
已邀请:

blogdaren - 乐于分享的PHP码农【http://www.blogdaren.com】

赞同来自: 隋意

1.  位于onWorkerStart内worker如果业务比较慢,会影响到即阻塞最外层worker的接收数据的。
2.  位于onWorkerStart内worker所在的进程是子进程。
3.  如果业务比较繁重,就不要放在 onWorkerStart 里搞,应该采用异步模型将繁重的任务转发给独立的业务worker来搞。

隋意

赞同来自:

ok。万分感谢。

要回复问题请先登录注册