PHP多線程

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, 因此這裏是子進程執行的邏輯。
}
PHP進程

PHP進程線程

從這樣,能夠看出來,父進程和子進程不是同步關係。父進程結束,子進程能夠繼續執行,父進程在等待子進程結束並回收。code

PHP進程

PHP進程blog

 這裏的PHP-fpm 都是fork出來的子進程,而且都是並行執行的。 因此本來單線程須要23分鐘執行的代碼,這裏fork出20個子進程,就能夠把時間縮短到30秒
相關文章
相關標籤/搜索