假設(shè)有一個(gè)靜態(tài)類
class Data{
static $rules;
}
我在new Worker 前對(duì)$rules進(jìn)行了賦值操作,后面在 $worker->onMessage(){} 里面進(jìn)行了修改。
那么在onMessage的操作其余的進(jìn)程能否讀取到操作后的?
多進(jìn)程之間onMessage是如何區(qū)別當(dāng)前屬于哪個(gè)進(jìn)程,為什么我在
$worker->onMessage=function($connection){
echo $connection->id;
//固定的
};
如何調(diào)試各個(gè)進(jìn)程的$rules的狀態(tài)?
1、讀不到: 多進(jìn)程之間的進(jìn)程變量是彼此隔離的,是不能直接互相訪問(wèn)的,如果要共享的話,需要借助GlobalData、redis組件來(lái)實(shí)現(xiàn);
2、區(qū)分各個(gè)進(jìn)程: 每個(gè)進(jìn)程都有一個(gè)唯一的id編號(hào),其實(shí)本質(zhì)和進(jìn)程ID是以一對(duì)一的概念抽象,可以這樣獲取區(qū)分:
$worker_id = $connection->worker->id;
3、connection->id固定: 這個(gè)是每個(gè)tcp連接的id編號(hào),當(dāng)前活動(dòng)進(jìn)程內(nèi)自增唯一,最大值為PHP_INT_MAX。
在此基礎(chǔ)之上,有沒有方法控制鏈接請(qǐng)求走哪個(gè)$worker_id ?貌似本地測(cè)試的時(shí)候一直是$connection->worker->id =1 的在響應(yīng)
1、這個(gè)沒法控制的,哪個(gè)進(jìn)程去accept哪個(gè)連接請(qǐng)求這是由操作系統(tǒng)內(nèi)核調(diào)度的。
2、不要被"某個(gè)連接一直似乎被某個(gè)進(jìn)程在處理"的表面現(xiàn)象給迷惑了,你多壓測(cè)連接量自然就看出不是這么回事了,一個(gè)進(jìn)程能一直在處理,只能說(shuō)明這個(gè)進(jìn)程還是不夠繁忙能夠處理過(guò)來(lái)。