首頁  >  文章  >  後端開發  >  php中通訊協定以及行程與執行緒的基礎講解

php中通訊協定以及行程與執行緒的基礎講解

不言
不言原創
2018-08-14 14:47:482005瀏覽

這篇文章帶給大家的內容是關於php中通訊協定以及進程與執行緒的基礎講解,有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

整理了一些關於PHP相關的基礎。請大家隨意摘看。

通訊協定

網路通訊協定是一種網路通用語言,為連接不同作業系統和不同硬體體系結構的網路絡引提供通訊支持,是一種網路通用語言。

應用層

#HTTPHypertext Transfer Protocol 超文本傳輸協議,顯示網頁DNSDomain Name System 網域系統#FTPFile Transfer Protocol 檔案傳輸協定
名稱 #註解

#SFTP

SSH File Transfer Protocol 安全文件傳送協定SSHSecure Shell通訊層
#通訊層

##註解TCP#Transmission Control Protocol 三次握手傳輸協定 UDP網路層
############註釋##################IP######Internet Protocol############ICMP######Internet Control Message Protocol ,主要用於路由發送錯誤報告############

HTTP

HTTP是Hyper Text Transfer Protocol(超文本傳輸協定)的縮寫。它的發展是萬維網協會(World Wide Web Consortium)和Internet工作小組IETF(Internet Engineering Task Force)合作的結果,(他們)最終發布了一系列的RFC,RFC 1945定義了HTTP/1.0版本。其中最著名的就是RFC 2616。 RFC 2616定義了今天普遍使用的一個版本-HTTP 1.1。

HTTP協定(HyperText Transfer Protocol,超文本傳輸協定)是用於從WWW伺服器傳輸超文本到本機瀏覽器的傳送協定。它可以使瀏覽器更加高效,使網路傳輸減少。它不僅保證電腦正確快速地傳輸超文本文檔,還確定傳輸文檔中的哪一部分,以及哪部分內容首先顯示(如文本先於圖形)等。

HTTP是一個應用層協議,由請求和回應構成,是一個標準的客戶端伺服器模型。 HTTP是一個無狀態的協定。

在TCP/IP協定堆疊中的位置

HTTP協定通常承載於TCP協定之上,有時也承載於TLS或SSL協定層之上,這個時候,就成了我們常說的HTTPS。如下圖所示

php中通訊協定以及行程與執行緒的基礎講解

預設HTTP的連接埠號碼為80,HTTPS的連接埠號碼為443。

HTTP的請求回應模型

HTTP協定永遠都是客戶端發起請求,伺服器回傳回應。見下圖

php中通訊協定以及行程與執行緒的基礎講解

這樣就限制了使用HTTP協議,無法實現在客戶端沒有發起請求的時候,伺服器將訊息推送給客戶端。
HTTP協定是一個無狀態的協議,同一個客戶端的這次請求和上次請求是沒有對應關係。

HTTP Request

客戶端發送一個HTTP請求到伺服器的請求訊息包括以下格式

  • 請求行(request line)

  • 請求頭部(header)

  • 空白行和請求資料四個部分組成。

Get請求範例

GET /562f25980001b1b106000338.jpg HTTP/1.1Host img.mukewang.comUser-Agent Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36Accept image/webp,image/*,*/*;q=0.8Referer http://www.imooc.com/Accept-Encoding gzip, deflate, sdchAccept-Language zh-CN,zh;q=0.8

POST請求範例

POST / HTTP1.1Host:www.wrox.comUser-Agent:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)Content-Type:application/x-www-form-urlencodedContent-Length:40Connection: Keep-Alivename=Professional%20Ajax&publisher=Wiley

第一部分:請求行,第一行顯示請求類型,以及http1.1版本。
第二部分:請求頭部,第二行至第六行。
第三部分:空行,第七行的空白行。
第四部分:請求數據,第八行。

HTTP Response

一般情況下,伺服器接收並處理客戶端發送過來的請求後會傳回一個HTTP的回應訊息。
HTTP回應也由四個部分組成

  • 狀態行

  • #訊息標頭

  • 空白行和回應正文。

HTTP/1.1 200 OKDate: Fri, 22 May 2009 06:07:21 GMTContent-Type: text/html; charset=UTF-8<!--body goes here-->

第一部分狀態行 : 由HTTP協定版本號、狀態碼、狀態訊息三部分組成。
第二部分訊息標頭: 用來說明客戶端要使用的一些附加資訊
第三部分空行: 訊息標頭後面的空行是必須的
第四部分回應正文: 伺服器傳回給客戶端的文字訊息。

HTTP 狀態碼

狀態碼有三位數字組成,第一個數字定義了回應的類別,共分五種類別

##已重新導向- -要完成請求必須進行更進一步的操作4xx客戶端錯誤--請求有語法錯誤或請求無法實現#5xx伺服器端錯誤--伺服器未能實現合法的請求#

進程與執行緒

進程的概念是作業系統的結構的基礎。 Multics的設計者在20世紀60年代首次使用了這個技術詞語,它比作業更通用一些。關於進程的定義,如下所示

  • 一個正在執行的程式。

  • 電腦中正在執行的程式的一個實例。

  • 可以指派給處理器並由處理器執行的一個實體。

  • 由單一的順序的執行緒、一個目前狀態和一組相關的系統資源所描述的活動單元。

為什麼設計了流程?

設計出一個能夠協調各種不同活動的系統軟體是非常困難的。

在任何時刻都有許多作業在運行中,每個作業都包括要求按照順序執行的很多步驟,因此分析時間的序列組合是不可的。由於缺乏能夠在所有活動中進行協調和合作的系統級的方法,程式設計師只能基於他們對作業系統所控制的環境的理解,採用自己的特殊方法。然而這種方法是很脆弱的,尤其對於一些程式設計中的小錯誤,因為這些錯誤只有在很少見的時間序列發生時才會出現。

由於需要從應用程式軟體錯誤和硬體錯誤中區分出這些錯誤,因此診斷工作是很困難的。及時檢測出錯誤,也很難確定原因,因為很難在線上錯誤產生的精確場景。一般而言,產生這類錯誤的4個主要原因如下:

  • #不正確同步

  • 失敗互斥。

  • 不確定的程式操作

  • 死鎖

解決這些問題需要一個系統層級的方法監控處理器中不同程式的執行。進程的概念為此提供了基礎。

因此行程可以看做是由三個部分組成的

  • 一段可以執行的程式

  • 程式所需要的相關資料

  • 程式的執行上下文

傳統地,作業系統建立進程的方式對用戶和應用程式都是透明的,這在當代作業系統中也很普遍。但是允許一個進程引發另一個進程的創建將是很有用的。

例如一個程式進程可以產生另一個進程,以接受應用程式產生的數據,並將資料組織成適合以後分析的格式。新進程與應用程式並行的運行,並當得到新的資料時啟動。

這個方案對於建構應用程式是非常有用的,例如,伺服器進程(如列印伺服器、檔案伺服器)可以為它處理的每個請求產生一個新進程。當作業系統為另一個進程的明確請求產生一個新進程時,這個動作稱為進程派生。

當一個行程派生另一個行程時,前一個稱作父行程,被衍生的行程稱作子行程。在典型的情況下,相關進程需要像話之間溝通和合作。對程式設計師來說,合作是一個非常困難的任務。

什麼是執行緒
執行緒是一個行程的執行流,執行緒不能分配系統資源,它是行程的一部分,比行程更小的獨立運行的單位

#進程和線程的關係

進程就像地主,有土地(系統資源),線程就像佃戶(線程,執行種地流程)。每個地主(進程)只要有一個工作的佃戶(線程)。

進程-資源分配的最小單位,相對健壯,崩潰一般不影響其他進程,但是切換進程時耗費資源,效率差些。

執行緒-程式執行的最小單位,沒有獨立的位址空間,一個執行緒死掉可能整個行程就死掉,但是節省資源,切換效率高。

PHP常見的進程和執行緒
  • 在web應用程式中,我們每次造訪php,就建立一個PHP進程,當然也會建立至少一個PHP執行緒
  • PHP使用pcntl來進行多進程程式設計
  • PHP中使用pthreads來進行多執行緒程式設計
  • #nginx的每個行程只有一個線程,每個執行緒可以處理多個客戶端的存取
  • #php-fpm使用多行程模型,每個執行緒只有一個線程,每個執行緒只能處理一個客戶端存取
  • apache可能使用多進程模型,也可能使用多執行緒模型,取決於使用哪種SAPI

相關推薦:

AS3與PHP通訊的五種方法(基於HTTP協定)_PHP教學

PHP與Linux進程間的通訊

PHP中Http協定post請求參數,php協定post請求_PHP教學

###
狀態 註解
1xx 指示訊息--表示請求已接收,繼續處理
2xx 成功--表示請求已成功接收、理解、接受
#3xx

以上是php中通訊協定以及行程與執行緒的基礎講解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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