php實現多進程簡單來說就三步:創建子進程,管理子進程,處理子進程。說起來簡單,其中涉及到的知識卻是不少,比如說你得知道每個進程都有一個進程號(pid),還得知道命令行是如何執行php文件之類的。(推薦學習:PHP視頻教程)
php多進程需要pcntl,posix擴展支持,可以通過 php -m 查看。
第一步的創建子進程,用到的是pcntl_fork()函數,函數返回值通常為0,失敗時返回-1。我先舉一個創建子進程的直觀小栗子:
$ppid = posix_getpid(); $pid = pcntl_fork(); if ($pid == -1) { throw new Exception('fork子進程失敗!'); } elseif ($pid > 0) { cli_set_process_title("我是父進程,我的進程id是{$ppid}."); sleep(30); // 保持30秒,確保能被ps查到 } else { $cpid = posix_getpid(); cli_set_process_title("我是{$ppid}的子進程,我的進程id是{$cpid}."); sleep(30); }
第二步的管理子進程,使用的是信號。簡單來說,就是父進程里使用兩個函數pcntl_signal()和pcntl_signal_dispatch,負責給子進程安裝信號處理器和分發工作。 這個步驟就先如此簡單介紹一下,因為涉及到一個回調函數的概念,以后我會補上更全面地內容。
第三步的處理子進程,也是需要兩個函數。一個是發送終止信號的posix_kill()函數,一個是等待子進程狀態的pcntl_waitpid()函數,這樣就可以實現跟子進程共同完成的任務的目的了。
所以,后端開發就是這樣,很多以為會復雜的東西,其實步驟很清晰,基本都屬于用到的知識多,用到的函數卻不多這樣。所以入門的時候就硬著頭皮學下去好了,要相信自己總有一天可以很清楚明白。
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com