php、apache、nginx、線程、進程

來源:互聯網
上載者:User

標籤:聯絡   利用   機制   cgi   nginx+php   web   一個   上下文   重用   

最近在學swoole,發現裡面設計好多作業系統裡面的概念,這些基礎知識正是自己欠缺的。根基不牢的高樓大廈,猶如空中樓閣,隨時都要崩塌,早發現早治療哈哈^_^。


一、概念

1) 進程:是指正在啟動並執行一個程式,不僅僅包含這個程式的代碼( code ),資料( data ),檔案,還包括當前的運行狀態,

即指令( Program Counter ),棧,和當前 CPU 寄存器的值(有時還包括堆)。新建立一個進程需要在記憶體中建立以上所有內容。

對於 Web Server 來說,服務不同串連的代碼、資料、檔案都是相同的,只是運行狀態不同。所以對每個串連都重新建立進程會造成資源浪費。

2) 線程:基本上就是對進程的代碼、資料、檔案進行重用,每個線程只是儲存了不同的運行狀態。於是節省了資源。

3)開銷:另一方面,單個 CPU 同一時間只能執行一條指令,即只能運行一個進程。為了讓系統能「看起來」在同時進行多個進程, CPU 需要不斷地在進程之間切換。

這就是 Multiprogramming 的概念。而進行進程切換的時候不但需要把 CPU 的當前指令指標( Program Counter )切換到下一個進程,並且需要儲存當前進程的運行狀態,

載入下一個進程上次被中斷時的運行狀態。這部分時間其實 CPU 是沒有做什麼對程式來說有意義的事情的,稱為進程切換的開銷( Overhead )。

線程之間的切換代價要小於進程之間的切換代價,因此使用線程節省了時間。

二、各概念之間的聯絡

1、線程與進程的關係:

1) 一個進程可以有很多線程。多進程可以很好的利用 CPU 。

2) 多個線程是運行在單一進程的上下文中的,其實對於單一進程中的每一個線程,都有它自己的上下文,但是由於共同存在於同一進程,所以它們也共用這個進程,包括它的代碼、資料等等。

2、 Apache、nginx在處理php請求上的區別:

1) Apache+php_module 是父進程+子進程的模式,每個訪問請求會產生子進程,就不會有阻塞了。

2) Nginx+PHP-FPM 的話感覺 Nginx 和 PHP 相互獨立了, Nginx 遇到自己處理不了的請求就會給 PHP-FPM ( PHP FastCGI進程管理器)處理,

每來一個請求就會交給一個子進程去處理(這雷根據 PHP 的回合組態不同效果也不同,子進程的數量可以是固定的也可以動態產生),然後 Nginx 對交給 PHP-FPM 的請求進行輪訓( epoll 機制)。

這樣處理效能和資源佔用都比 Apache 有優勢。

 

 

 

php、apache、nginx、線程、進程

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.