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