PHP 在liunx裏面是能夠實現多進程的,但須要使用liunx擴展:pcntl 擴展php
主要代碼是spa
1
2
3
4
5
6
7
8
9
10
11
|
$pid
= pcntl_fork();
//建立子進程
if
(
$pid
== -1) {
die
(
'could not fork'
);
//錯誤處理:建立子進程失敗時返回-1.
}
else
if
(
$pid
) {
pcntl_wait(
$status
,WNOHANG);
//父進程會獲得子進程號,因此這裏是父進程執行的邏輯
//若是不須要阻塞進程,而又想獲得子進程的退出狀態,則能夠註釋掉pcntl_wait($status)語句,或寫成:
//等待子進程中斷,防止子進程成爲殭屍進程。
}
else
{
exit
(0);
//子進程獲得的$pid爲0, 因此這裏是子進程執行的邏輯。
}
|
從這樣,能夠看出來,父進程和子進程不是同步關係。父進程結束,子進程能夠繼續執行,父進程在等待子進程結束並回收。code
這裏的PHP-fpm 都是fork出來的子進程,而且都是並行執行的。 因此本來單線程須要23分鐘執行的代碼,這裏fork出20個子進程,就能夠把時間縮短到30秒