1.只開啟了一個線程。同時有定時器任務(wù)和端口監(jiān)聽
2.定時器每一秒執(zhí)行一次。但是代碼會執(zhí)行2秒,導(dǎo)致定時器接連不斷的運(yùn)行,端口發(fā)來的數(shù)據(jù)無法響應(yīng)。
怎么辦?怎么實(shí)現(xiàn):定時器執(zhí)行完一次之后,先處理端口的任務(wù)然后再執(zhí)行下一次定時器任務(wù) ?
?
代碼:
$inner_http_worker = new Worker('http://0.0.0.0:1598');
$inner_http_worker->count = 1; //進(jìn)程數(shù)
// 當(dāng)http客戶端發(fā)來數(shù)據(jù)時觸發(fā)添加任務(wù)
$inner_http_worker->onMessage = array($this, 'onMessage');
//$inner_http_worker->onMessage = function ($http_connection, $data) {
$inner_http_worker->onWorkerStart = array($this, 'onWorkerStart');
// 執(zhí)行監(jiān)聽
$inner_http_worker->listen();
Worker::runAll();
public function onWorkerStart(){
Timer::add(1, array($this, 'workerloop'),[],true);
}
/**
* 監(jiān)聽techs
*/
public function onMessage($http_connection, $data){
echo '收到下載數(shù)據(jù)的請求,';
}
/**
* 定時執(zhí)行任務(wù)
*/
public function workerloop(){
echo "每1秒執(zhí)行一次';
sleep(2);
}
?```
?
?
把定時任務(wù)丟其它進(jìn)程去做。
定時任務(wù)這么慢當(dāng)然不能和socket請求放一起執(zhí)行
定時器里面加載了一個大型數(shù)組,占用內(nèi)存5個G,需要通過發(fā)送socker請求去改變里面的變量。怎么辦?怎么讓進(jìn)程運(yùn)行一次定時任務(wù)之后 優(yōu)先處理socker 請求?
@2710: 不過這樣有一個問題,需要定時執(zhí)行的代碼會大大延后。 如何可以多進(jìn)程并發(fā),多個進(jìn)程可以共享這5G的內(nèi)存中的數(shù)組?
這種單進(jìn)程就好了吧,多進(jìn)程共享數(shù)據(jù)在寫數(shù)據(jù)和讀數(shù)據(jù)的時候都要加鎖,性能很差的,可能還沒但進(jìn)程性能高。