摘要:多進(jìn)程語言可以很容易的實(shí)現(xiàn)多進(jìn)程,對(duì)于,有沒有比較簡單的方法去實(shí)現(xiàn)這里有一種巧妙的方式,來實(shí)現(xiàn)多進(jìn)程。這樣會(huì)導(dǎo)致進(jìn)程重啟進(jìn)程時(shí),發(fā)現(xiàn)有鎖文件,就不會(huì)繼續(xù)啟動(dòng)進(jìn)程。解決辦法在進(jìn)程中自動(dòng)刪除昨天的鎖文件
多進(jìn)程:
GO 語言可以很容易的實(shí)現(xiàn)多進(jìn)程,對(duì)于 PHP,有沒有比較簡單的方法去實(shí)現(xiàn)?
這里有一種巧妙的方式,來實(shí)現(xiàn)多進(jìn)程。
但是需要注意一下 內(nèi)存 和 CPU 的使用情況
場景:消息PUSH。
假設(shè) PUSH 有多種類型,比如針對(duì)用戶的,針對(duì)游戲的,針對(duì)全局的。
我們使用 PHP 腳本去執(zhí)行下發(fā)操作,長連接 PUSH 服務(wù)使用第三方系統(tǒng)提供的 API 來支持。
PHP 腳本是順序執(zhí)行的,假設(shè)配置了 N 條PUSH,后續(xù)的 PUSH 就要等前面的 PUSH 執(zhí)行完畢,才能繼續(xù)。
比如,第一條 PUSH 是處于 While(true) 之類的循環(huán)狀態(tài)中,下發(fā)時(shí)間范圍為一整天;那么其他的 PUSH 就只
能干等著,無法及時(shí)執(zhí)行 PUSH 操作,從而耽誤了業(yè)務(wù)。
方案:Deamon 進(jìn)程 和 Act 進(jìn)程
1、Deamon 進(jìn)程:配置 crontab
* * * * * flock -xn /tmp/push_deamon.lock -c "/usr/local/php/bin/php push_deamon.php >> /tmp/push_error.log 2>&1"
2、Act 進(jìn)程:在 push_deamon.php 中,針對(duì)不同 push_id,啟動(dòng)以下腳本。
$command = flock -xn /tmp/push_act_{$push_id}.lock -c "nohup /usr/local/php/bin/php -f push_act.php $push_id >> /tmp/push_error.log 2>&1 &" exec($command);
問題:Act 進(jìn)程被手動(dòng) Kill
有些 PUSH 是每天執(zhí)行一次的,如果對(duì)應(yīng)的 Act 進(jìn)程被殺死。
那么對(duì)應(yīng)的鎖文件 push_act_{$push_id}.lock,就沒有被清理。
這樣會(huì)導(dǎo)致 Deamon 進(jìn)程重啟 Act 進(jìn)程時(shí),發(fā)現(xiàn)有鎖文件,就不會(huì)繼續(xù)啟動(dòng) Act 進(jìn)程。
解決辦法:在 Deamon 進(jìn)程中自動(dòng)刪除昨天的鎖文件
$command = "find /tmp/ -daystart -mtime 1 -type f -name push_act_{$id}.lock -exec rm -f {} ; >> /tmp/push_error.log 2>&1 &"; exec($command);
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/22949.html
摘要:多進(jìn)程中與多進(jìn)程相關(guān)的兩個(gè)重要拓展是和。函數(shù)執(zhí)行期間,主進(jìn)程除了等待無法處理其他任務(wù),所以一般不認(rèn)為這是多進(jìn)程編程?;厥兆舆M(jìn)程有兩種方式,一種是主進(jìn)程調(diào)用函數(shù)等待子進(jìn)程結(jié)束另外一種是處理信號(hào)。 轉(zhuǎn)載請(qǐng)注明文章出處: https://tlanyan.me/php-review... PHP回顧系列目錄 PHP基礎(chǔ) web請(qǐng)求 cookie web響應(yīng) session 數(shù)據(jù)庫操作 加解...
摘要:下文如無特殊聲明將使用進(jìn)程同時(shí)表示進(jìn)程線程。收到數(shù)據(jù)后服務(wù)器程序進(jìn)行處理然后使用向客戶端發(fā)送響應(yīng)?,F(xiàn)在各種高并發(fā)異步的服務(wù)器程序都是基于實(shí)現(xiàn)的,比如。 并發(fā) IO 問題一直是服務(wù)器端編程中的技術(shù)難題,從最早的同步阻塞直接 Fork 進(jìn)程,到 Worker 進(jìn)程池/線程池,到現(xiàn)在的異步IO、協(xié)程。PHP 程序員因?yàn)橛袕?qiáng)大的 LAMP 框架,對(duì)這類底層方面的知識(shí)知之甚少,本文目的就是詳細(xì)介...
摘要:第一次子進(jìn)程正在休眠中,父進(jìn)程依舊在循環(huán)中。第三次此時(shí)父進(jìn)程已經(jīng)執(zhí)行了,將已經(jīng)退出的子進(jìn)程回收,釋放了等資源。梳理一下流程,子進(jìn)程向父進(jìn)程發(fā)送信號(hào)是對(duì)人們來說是透明的,也就是說我們無須關(guān)心。 [原文地址:https://blog.ti-node.com/blog...] 上一篇尬聊了通篇的pcntl_wait()和pcntl_waitpid(),就是為了解決僵尸進(jìn)程的問題,但最后看起來...
閱讀 1010·2023-04-25 19:35
閱讀 2672·2021-11-22 09:34
閱讀 3703·2021-10-09 09:44
閱讀 1729·2021-09-22 15:25
閱讀 2944·2019-08-29 14:00
閱讀 3378·2019-08-29 11:01
閱讀 2606·2019-08-26 13:26
閱讀 1741·2019-08-23 18:08