php面試題1-線程和進程的區別(順帶提下協程)

來源:互聯網
上載者:User
一、什麼是進程

進程是程式執行是的一個執行個體,進程能夠分配給cpu和記憶體等資源。進程一般包括指令集和系統資源,其中指令集就是你的代碼,系統資源就是指cpu、記憶體以及I/O等。

進程是一個程式在一個資料集中的一次動態執行過程,可以簡單理解為“正在執行的程式”,它是CPU資源分派和調度的獨立單位。
進程一般由程式、資料集、進程式控制制塊三部分組成。我們編寫的程式用來描述進程要完成哪些功能以及如何完成;資料集則是程式在執行過程中所需要使用的資源;進程式控制制塊用來記錄進程的外部特徵,描述進程的執行變化過程,系統可以利用它來控制和管理進程,它是系統感知進程存在的唯一標誌。
進程的局限是建立、撤銷和切換的開銷比較大。 二、什麼是線程

線程是進程的一個執行流,線程不能分配系統資源,它是進程的一部分,比進程更小的獨立啟動並執行單位。
解釋一下:進程有兩個特性:一是資源的所有權,一個是調度執行(指令集),線程是調度執行中的一部分,是指進程執行過程的路徑,也叫程式執行流。線程有時候也叫輕量級進程。

線程是在進程之後發展出來的概念。 線程也叫輕量級進程,它是一個基本的CPU執行單元,也是程式執行過程中的最小單元,由線程ID、程式計數器、寄存器集合和堆棧共同組成。一個進程可以包含多個線程。
線程的優點是減小了程式並發執行時的開銷,提高了作業系統的並發效能,缺點是線程沒有自己的系統資源,只擁有在運行時必不可少的資源,但同一進程的各線程可以共用進程所擁有的系統資源,如果把進程比作一個車間,那麼線程就好比是車間裡面的工人。不過對於某些獨佔性資源存在鎖機制,處理不當可能會產生“死結”。 三、什麼是協程

協程是一種使用者態的輕量級線程,又稱微線程,英文名Coroutine,協程的調度完全由使用者控制。人們通常將協程和子程式(函數)比較著理解。
子程式調用總是一個入口,一次返回,一旦退出即完成了子程式的執行。
協程的起始處是第一個進入點,在協程裡,返回點之後是接下來的進入點。在python中,協程可以通過yield來調用其它協程。通過yield方式轉移執行權的協程之間不是調用者與被調用者的關係,而是彼此對稱、平等的,通過相互協作共同完成任務。其啟動並執行大致流程如下:
第一步,協程A開始執行。
第二步,協程A執行到一半,進入暫停,通過yield命令將執行權轉移到協程B。
第三步,(一段時間後)協程B交還執行權。
第四步,協程A恢複執行。

協程的特點在於是一個線程執行,與多線程相比,其優勢體現在:
* 協程的執行效率非常高。因為子程式切換不是線程切換,而是由程式自身控制,因此,沒有線程切換的開銷,和多線程比,線程數量越多,協程的效能優勢就越明顯。
* 協程不需要多線程的鎖機制。在協程中控制共用資源不加鎖,只需要判斷狀態就好了。
Tips:利用多核CPU最簡單的方法是多進程+協程,既充分利用多核,又充分發揮協程的高效率,可獲得極高的效能。 四、進程和線程的關係

進程就像地主,有土地(系統資源),線程就像佃戶(線程,執行種地流程)。每個地主(進程)只要有一個幹活的佃戶(線程)。
進程-資源分派的最小單位,相對健壯,崩潰一般不影響其他進程,但是切換進程時耗費資源,效率差些。
線程-程式執行的最小單位,沒有獨立的地址空間,一個線程死掉可能整個進程就死掉,但是節省資源,切換效率高。 五、php編程常見的進程和線程

1、在web應用中,我們每次訪問php,就建立一個PHP進程,當然也會建立至少一個PHP線程。
2、PHP使用pcntl來進行多進程編程
3、PHP中使用pthreads來進行多線程編程
4、nginx的每個進程只有一個線程,每個線程可以處理多個用戶端的訪問
5、php-fpm使用多進程模型,每個進程只有一個線程,每個線程只能處理一個用戶端訪問
6、apache可能使用多進程模型,也可能使用多執行緒模式,取決於使用哪種SAPI.
7、進程是cpu資源分派的最小單位,線程是cpu調度的最小單位

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.