首頁  >  文章  >  後端開發  >  php是單一進程還是多進程

php是單一進程還是多進程

(*-*)浩
(*-*)浩原創
2019-09-29 10:39:315944瀏覽

要想寫出一個php多進程的程序,其實就像把大象放在冰箱裡有幾步一樣簡單。

php是單一進程還是多進程

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()函數,這樣就可以實現跟子程序共同完成的任務的目的了。

所以,後端開發就是這樣,很多以為會複雜的東西,其實步驟很清晰,基本上都屬於用到的知識多,用到的函數卻不多這樣。所以入門的時候就硬著頭皮學下去好了,要相信自己總有一天可以很清楚明白。

以上是php是單一進程還是多進程的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn