搜尋
首頁後端開發php教程php面試題一之線程和進程的差別(順帶提下協程)

這篇文章介紹的內容是關於php面試題一之線程和進程的區別(順帶提下協程),有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下

一、什麼是行程


程式是程式執行是的一個實例,程式能夠指派給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調度的最小單位

一、什麼是行程

行程是程式執行是的一個實例,程式能夠指派給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調度的最小單位

相關推薦:

php面試可能會被問的技術題總結


以上是php面試題一之線程和進程的差別(順帶提下協程)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
高流量網站的PHP性能調整高流量網站的PHP性能調整May 14, 2025 am 12:13 AM

TheSecretTokeEpingAphp-PowerEdwebSiterUnningSmoothlyShyunderHeavyLoadInVolvOLVOLVOLDEVERSALKEYSTRATICES:1)emplactopCodeCachingWithOpcachingWithOpCacheToreCescriptexecution Time,2)使用atabasequercachingCachingCachingWithRedataBasEndataBaseLeSendataBaseLoad,3)

PHP中的依賴注入:初學者的代碼示例PHP中的依賴注入:初學者的代碼示例May 14, 2025 am 12:08 AM

你應該關心DependencyInjection(DI),因為它能讓你的代碼更清晰、更易維護。 1)DI通過解耦類,使其更模塊化,2)提高了測試的便捷性和代碼的靈活性,3)使用DI容器可以管理複雜的依賴關係,但要注意性能影響和循環依賴問題,4)最佳實踐是依賴於抽象接口,實現鬆散耦合。

PHP性能:是否可以優化應用程序?PHP性能:是否可以優化應用程序?May 14, 2025 am 12:04 AM

是的,優化papplicationispossibleandessential.1)empartcachingingcachingusedapcutorediucedsatabaseload.2)優化的atabaseswithexing,高效Quereteries,and ConconnectionPooling.3)EnhanceCodeWithBuilt-unctions,避免使用,避免使用ingglobalalairaiables,並避免使用

PHP性能優化:最終指南PHP性能優化:最終指南May 14, 2025 am 12:02 AM

theKeyStrategiestosigantificallyBoostPhpaPplicationPerformenCeare:1)UseOpCodeCachingLikeLikeLikeLikeLikeCacheToreDuceExecutiontime,2)優化AtabaseInteractionswithPreparedStateTementStatementStatementAndProperIndexing,3)配置

PHP依賴注入容器:快速啟動PHP依賴注入容器:快速啟動May 13, 2025 am 12:11 AM

aphpdepentioncontiveContainerIsatoolThatManagesClassDeptions,增強codemodocultion,可驗證性和Maintainability.itactsasaceCentralHubForeatingingIndections,因此reducingTightCightTightCoupOulplingIndeSingantInting。

PHP中的依賴注入與服務定位器PHP中的依賴注入與服務定位器May 13, 2025 am 12:10 AM

選擇DependencyInjection(DI)用於大型應用,ServiceLocator適合小型項目或原型。 1)DI通過構造函數注入依賴,提高代碼的測試性和模塊化。 2)ServiceLocator通過中心註冊獲取服務,方便但可能導致代碼耦合度增加。

PHP性能優化策略。PHP性能優化策略。May 13, 2025 am 12:06 AM

phpapplicationscanbeoptimizedForsPeedAndeffificeby:1)啟用cacheInphp.ini,2)使用preparedStatatementSwithPdoforDatabasequesies,3)3)替換loopswitharray_filtaray_filteraray_maparray_mapfordataprocrocessing,4)conformentnginxasaseproxy,5)

PHP電子郵件驗證:確保正確發送電子郵件PHP電子郵件驗證:確保正確發送電子郵件May 13, 2025 am 12:06 AM

phpemailvalidation invoLvesthreesteps:1)格式化進行regulareXpressecthemailFormat; 2)dnsvalidationtoshethedomainhasavalidmxrecord; 3)

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。