摘要:本節(jié)主要講解常用函數(shù)和進(jìn)程池的概念,也會(huì)涉及到守護(hù)進(jìn)程的知識(shí)。所以任何時(shí)候,建議預(yù)先創(chuàng)建好進(jìn)程,也就是使用進(jìn)程池的方式實(shí)現(xiàn)。
本節(jié)主要講解Posix常用函數(shù)和進(jìn)程池的概念,也會(huì)涉及到守護(hù)進(jìn)程的知識(shí)。本節(jié)難度較低。
Posix常用函數(shù) posix_kill向指定pid進(jìn)程發(fā)送信號(hào)。成功時(shí)返回 TRUE , 或者在失敗時(shí)返回 FALSE 。
bool posix_kill ( int $pid , int $sig )
$sig=0,可以檢測(cè)進(jìn)程是否存在,不會(huì)發(fā)送信號(hào)。
示例:
//向當(dāng)前進(jìn)程發(fā)送SIGUSR1信號(hào) posix_kill ( posix_getpid (), SIGUSR1 );
注:通過(guò) kill -l 可以看到Linux下所有的信號(hào)常量。posix_getpid
返回當(dāng)前進(jìn)程id。
posix_getppid返回父進(jìn)程id。
posix_setsid設(shè)置新會(huì)話組長(zhǎng),脫離終端。成功時(shí)返回session id,失敗返回 -1。寫守護(hù)進(jìn)程(Daemon) 用到該函數(shù)。下面引用Workerman源代碼里的一段示例:
function daemonize(){ umask(0); $pid = pcntl_fork(); if (-1 === $pid) { die("fork fail"); } elseif ($pid > 0) { exit(0); } if (-1 === posix_setsid()) { die("setsid fail"); } // Fork again avoid SVR4 system regain the control of terminal. $pid = pcntl_fork(); if (-1 === $pid) { die("fork fail"); } elseif (0 !== $pid) { exit(0); } }
如果程序需要以守護(hù)進(jìn)程的方式執(zhí)行,在業(yè)務(wù)代碼之前調(diào)用該函數(shù)即可。
防盜版聲明:本文系原創(chuàng)文章,發(fā)布于公眾號(hào)飛鴻影的博客(fhyblog)及博客園,轉(zhuǎn)載需作者同意。
什么是進(jìn)程池? 其實(shí)是很簡(jiǎn)單的概念,就是預(yù)先創(chuàng)建一組子進(jìn)程,當(dāng)有新任務(wù)來(lái)時(shí),系統(tǒng)通過(guò)調(diào)配該組進(jìn)程中的某個(gè)子進(jìn)程完成此任務(wù)。
前面幾節(jié)的示例里我們都是使用這種方式,預(yù)先創(chuàng)建好進(jìn)程,而不是動(dòng)態(tài)創(chuàng)建。
引入《Linux高性能服務(wù)器編程》的一段話,描述動(dòng)態(tài)創(chuàng)建進(jìn)程的缺點(diǎn):
動(dòng)態(tài)創(chuàng)建進(jìn)程(或線程)比較耗費(fèi)時(shí)間,這將導(dǎo)致較慢的客戶響應(yīng)。
動(dòng)態(tài)創(chuàng)建的子進(jìn)程通常只用來(lái)為一個(gè)客戶服務(wù),這樣導(dǎo)致了系統(tǒng)上產(chǎn)生大量的細(xì)微進(jìn)程(或線程)。進(jìn)程和線程間的切換將消耗大量CPU時(shí)間。
動(dòng)態(tài)創(chuàng)建的子進(jìn)程是當(dāng)前進(jìn)程的完整映像,當(dāng)前進(jìn)程必須謹(jǐn)慎的管理其分配的文件描述符和堆內(nèi)存等系統(tǒng)資源,否則子進(jìn)程可能復(fù)制這些資源,從而使系統(tǒng)的可用資源急劇下降,進(jìn)而影響服務(wù)器的性能。
所以任何時(shí)候,建議預(yù)先創(chuàng)建好進(jìn)程,也就是使用進(jìn)程池的方式實(shí)現(xiàn)。
像我們熟知的php-fpm還支持最大創(chuàng)建多少個(gè)進(jìn)程、初始創(chuàng)建多少個(gè)進(jìn)程這種方式,大家感興趣可以研究研究。
(未完待續(xù))
歡迎關(guān)注公眾號(hào)及時(shí)獲取最新文章推送!
推薦!每月僅需$2.5,即可擁有配置SSD的VPS!
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/28924.html
摘要:消息隊(duì)列更常見(jiàn)的用途是主進(jìn)程分配任務(wù),子進(jìn)程消費(fèi)執(zhí)行。子進(jìn)程前面加了個(gè),這是為了防止父進(jìn)程還未往消息隊(duì)列中加入內(nèi)容直接退出。 前面幾節(jié)都是講解pcntl擴(kuò)展實(shí)現(xiàn)的多進(jìn)程程序。本節(jié)給大家介紹swoole擴(kuò)展的swoole_process模塊。 swoole多進(jìn)程 swoole_process 是swoole提供的進(jìn)程管理模塊,用來(lái)替代PHP的pcntl擴(kuò)展。 首先,確保安裝的swoole...
摘要:用于創(chuàng)建子進(jìn)程。該函數(shù)阻塞當(dāng)前進(jìn)程,只到當(dāng)前進(jìn)程的一個(gè)子進(jìn)程退出或者收到一個(gè)結(jié)束當(dāng)前進(jìn)程的信號(hào)。注意處需要注意子進(jìn)程需要防止子進(jìn)程也進(jìn)入循環(huán)。如果沒(méi)有,最終創(chuàng)建的子進(jìn)程不只個(gè)。 本系列文章將向大家講解pcntl_*系列函數(shù),從而更深入的理解進(jìn)程相關(guān)知識(shí)。 PCNTL在PHP中進(jìn)程控制支持默認(rèn)是關(guān)閉的。您需要使用 --enable-pcntl 配置選項(xiàng)重新編譯PHP的 CGI或CLI版本...
摘要:任何進(jìn)程在退出前使用退出都會(huì)變成僵尸進(jìn)程用于保存進(jìn)程的狀態(tài)等信息,然后由進(jìn)程接管。這時(shí)候就算手動(dòng)結(jié)束腳本程序也無(wú)法關(guān)閉這個(gè)僵尸子進(jìn)程了。那么子進(jìn)程結(jié)束后,沒(méi)有回收,就產(chǎn)生僵尸進(jìn)程了。本小節(jié)我們通過(guò)安裝信號(hào)處理函數(shù)來(lái)解決僵尸進(jìn)程問(wèn)題。 上一篇文章講解了pcntl_fork和pcntl_wait兩個(gè)函數(shù)的使用,本篇繼續(xù)講解PHP多進(jìn)程相關(guān)新知識(shí)。 僵尸(zombie)進(jìn)程 這里說(shuō)下僵尸進(jìn)程...
摘要:本節(jié)講解幾個(gè)多進(jìn)程的實(shí)例。新開(kāi)終端,我們使用命令查看進(jìn)程可以看到個(gè)進(jìn)程個(gè)主進(jìn)程,個(gè)子進(jìn)程。使用命令結(jié)束子進(jìn)程,主進(jìn)程會(huì)重新拉起一個(gè)新的子進(jìn)程。 本節(jié)講解幾個(gè)多進(jìn)程的實(shí)例。 多進(jìn)程實(shí)例 Master-Worker結(jié)構(gòu) 下面例子實(shí)現(xiàn)了簡(jiǎn)單的多進(jìn)程管理: 支持設(shè)置最大子進(jìn)程數(shù) Master-Worker結(jié)構(gòu):Worker掛掉,Master進(jìn)程會(huì)重新創(chuàng)建一個(gè)
摘要:修復(fù)添加超過(guò)萬(wàn)個(gè)以上定時(shí)器時(shí)發(fā)生崩潰的問(wèn)題增加模塊,下高性能序列化庫(kù)修復(fù)監(jiān)聽(tīng)端口設(shè)置無(wú)效的問(wèn)題等。線程來(lái)處理網(wǎng)絡(luò)事件輪詢,讀取數(shù)據(jù)。當(dāng)?shù)娜挝帐殖晒α艘院?,由這個(gè)線程將連接成功的消息告訴進(jìn)程,再由進(jìn)程轉(zhuǎn)交給進(jìn)程。此時(shí)進(jìn)程觸發(fā)事件。 本文示例代碼詳見(jiàn):https://github.com/52fhy/swoo...。 簡(jiǎn)介 Swoole是一個(gè)PHP擴(kuò)展,提供了PHP語(yǔ)言的異步多線程服務(wù)器...
閱讀 3679·2021-11-24 09:38
閱讀 3159·2021-11-15 11:37
閱讀 801·2021-11-12 10:36
閱讀 3557·2021-10-21 09:38
閱讀 3230·2021-09-28 09:36
閱讀 2430·2021-09-22 16:01
閱讀 5006·2021-09-22 15:09
閱讀 1230·2019-08-30 15:55