1. <nobr id="easjo"><address id="easjo"></address></nobr>

      <track id="easjo"><source id="easjo"></source></track>
      1. 
        

      2. <bdo id="easjo"><optgroup id="easjo"></optgroup></bdo>
      3. <track id="easjo"><source id="easjo"><em id="easjo"></em></source></track><option id="easjo"><span id="easjo"><em id="easjo"></em></span></option>
          貴州做網站公司
          貴州做網站公司~專業!靠譜!
          10年網站模板開發經驗,熟悉國內外開源網站程序,包括DEDECMS,WordPress,ZBlog,Discuz! 等網站程序,可為您提供網站建設,網站克隆,仿站,網頁設計,網站制作,網站推廣優化等服務。我們專注高端營銷型網站,企業官網,集團官網,自適應網站,手機網站,網絡營銷,網站優化,網站服務器環境搭建以及托管運維等。為客戶提供一站式網站解決方案?。?!

          workerman(workerman的核心概念)

          來源:互聯網轉載 時間:2024-05-11 15:23:00

          Workerman是一款純PHP開發的開源高性能的PHP socket 服務框架。它不是一個MVC框架,而是一個更底層更通用的socket服務框架,你可以用它開發tcp代理、梯子代理、做游戲服務器、郵件服務器、ftp服務器。

          實際上Workerman類似一個PHP版本的nginx,核心也是多進程+Epoll+非阻塞IO。Workerman每個進程能維持上萬并發連接。由于本身常住內存,不依賴Apache、nginx、php-fpm這些容器,擁有超高的性能。

          同時支持TCP、UDP、UNIXSOCKET,支持長連接,支持Websocket、HTTP、WSS、HTTPS等通訊協以及各種自定義協議。擁有定時器、異步socket客戶端、異步MySQL、異步Redis、異步Http、異步消息隊列等眾多高性能組件。

          首先需要了解一下幾個核心概念,1.多進程 2.Epoll 3.非阻塞IO

          1、多進程:

          首先什么是進程呢,一個進程包括了代碼、數據和分配給進程的資源(內存),在計算機系統里直觀地說一個進程就是一個PID。操作系統保護進程空間不受外部進程干擾,即一個進程不能訪問到另一個進程的內存。

          有時候進程間需要進行通信,這時可以使用操作系統提供進程間通信機制。通常情況下,執行一個可執行文件操作系統會為其創建一個進程以供它運行。

          但如果該執行文件是基于多進程設計的話,操作系統會在最初的進程上創建出多個進程出來,這些進程間執行的代碼是一樣,但執行結果可能是一樣的,也可能是不一樣的。

          為什么需要多進程?最直觀的想法是,如果操作系統支持多核的話,那么一個執行文件可以在不同的核心上跑;即使是非多核的,在一個進程在等待I/O操作時另一個進程也可以在CPU上跑,提高CPU利用率、程序的效率。

          在Linux系統上可以通過fork()來在父進程中創建出子進程。一個進程調用fork()后,系統會先給新進程分配資源,例如存儲數據和代碼空間。然后把原來進程的所有值、狀態都復制到新的進程里,只有少數的值與原來的進程不同,以區分不同的進程。

          fork()函數會返回兩次,一次給父進程(返回子進程的pid或者fork失敗信息),一次給子進程(返回0)。至此,兩個進程分道揚鑣,各自運行在系統里。

          2、非阻塞IO:

          首先什么是IO,即input與output的操作。網絡IO的本質是socket的讀取,socket在linux系統被抽象為流,IO可以理解為對流的操作。對于一次IO訪問(以read舉例),數據會先被拷貝到操作系統內核的緩沖區中,然后才會從操作系統內核的緩沖區拷貝到應用程序的地址空間。

          所以說,當一個read操作發生時,它會經歷兩個階段:

          第一階段(等待數據):等待數據準備 (Waiting for the data to be ready)。

          第二階段(拷貝數據):將數據從內核拷貝到進程中 (Copying the data from the kernel to the process)

          對于socket流(即IO)而言,

          第一步:通常涉及等待網絡上的數據分組到達,然后被復制到內核的某個緩沖區。

          第二步:把數據從內核緩沖區復制到應用進程緩沖區。

          網絡IO的模型大致有如下幾種:

          同步模型(synchronous IO)

          阻塞IO(bloking IO)資源不可用時,IO請求一直阻塞,直到反饋結果(有數據或超時)。在linux中,默認情況下所有的socket都是blocking,blocking IO的特點就是在IO執行的兩個階段(等待數據和拷貝數據兩個階段)都被block了。

          非阻塞IO(non-blocking IO)資源不可用時,IO請求離開返回,返回數據標識資源不可用。在linux中,如果數據還沒有準備好,那么它并不會block用戶進程,內核馬上返回給進程,說明這個命令不能立即滿足(EAGAIN 或 EWOULDBLOCK)。因此非阻塞就是使用輪詢的(polling)方式來實現。

          多路復用IO(multiplexing IO) IO multiplexing就是我們說的select,poll,epoll,有些地方也稱這種IO方式為event driven IO。select/epoll的好處就在于單個process就可以同時處理多個網絡連接的IO。

          它的基本原理就是select,poll,epoll這個function會不斷的輪詢所負責的所有socket,當某個socket有數據到達了,就通知用戶進程。在IO multiplexing Model中,實際中,對于每一個socket,一般都設置成為non-blocking。

          但是,整個用戶的process其實是一直被block的。只不過process是被select這個函數block,而不是被socket IO給block。所以IO多路復用是阻塞在select,epoll這樣的系統調用之上,而沒有阻塞在真正的I/O系統調用如recvfrom之上。

          信號驅動式IO(signal-driven IO)

          異步IO(asynchronous IO)用戶進程發起read操作之后,立刻就可以開始去做其它的事。而另一方面,從kernel的角度,當它受到一個asynchronous read之后,首先它會立刻返回,所以不會對用戶進程產生任何block。

          然后,kernel會等待數據準備完成,然后將數據拷貝到用戶內存,當這一切都完成之后,kernel會給用戶進程發送一個signal,告訴它read操作完成了。

          3、Epoll : epoll現在就很好理解了,epoll就是Linux內核為處理大批量文件描述符而作了改進的poll,是Linux下多路復用IO接口select/poll的增強版本,它能顯著提高程序在大量并發連接中只有少量活躍的情況下的系統CPU利用率。

          PS.幾個需要注意的點:

          1:IO多路復用是同步阻塞模型還是異步阻塞模型?

          同步是需要主動等待消息通知,而異步則是被動接收消息通知,通過回調、通知、狀態等方式來被動獲取消息。IO多路復用在阻塞到select階段時,用戶進程是主動等待并調用select函數獲取數據就緒狀態消息,并且其進程狀態為阻塞。所以,把IO多路復用歸為同步阻塞模式。

          2:到底什么是并發,高并發到底是一張怎么樣的狀態?

          高并發的程序一般使用同步非阻塞方式而非多線程 + 同步阻塞方式。要理解這一點,首先要看一下并發和并行的區別。也就是說并發數是指同時進行的任務數(如同時服務的 HTTP 請求),而并行數是可以同時工作的物理資源數量(如 CPU 核數)。

          通過合理調度任務的不同階段,并發數可以遠遠大于并行度,這就是區區幾個 CPU 可以支持上萬個用戶并發請求的奧秘。在這種高并發的情況下,為每個任務(用戶請求)創建一個進程或線程的開銷非常大。而同步非阻塞方式可以把多個 IO 請求丟到后臺去,這就可以在一個進程里服務大量的并發 IO 請求。

          看完了這篇文章,相信你對“workerman的核心概念”有了一定的了解,如果想了解更多相關知識,歡迎關注本站行業資訊頻道,感謝各位的閱讀!

          標簽:workerman-

          c語言中正確的字符常量是用一對單引號將一個字符括起表示合法的字符常量。例如‘a’。數值包括整型、浮點型。整型可用十進制,八進制,十六進制。八進制前面要加0,后面...

          2022年天津專場考試原定于3月19日舉行,受疫情影響確定延期,但目前延期后的考試時間推遲。 符合報名條件的考生,須在規定時間登錄招考資訊網(www.zha...

          :喜歡聽,樂意看。指很受歡迎?!巴卣官Y料”喜聞樂見:[ xǐ wén lè jiàn ]詳細解釋1. 【解釋】:喜歡聽,樂意看。指很受歡迎。2. 【示例】:這是...

          電話銀行可以轉賬嗎?通常情況下電話銀行也是可以進行轉賬業務操作的,用戶可以撥打對應的銀行卡官方客服電話進行咨詢是否支持電話銀行轉賬。如果該銀行支持此項業務的話,用戶即可根據電話客服的提示,輸入相應的轉賬卡號以及密碼就可以完成電話轉賬了。但一般不采用這種轉賬方式,因為銀行卡號通常都是比較長的容易發生錯誤導致轉賬失敗。建行電話轉賬的條件是什么?建行電話轉賬首先你需要去建行的營業網點開通電話銀行,然后才...

          【資料圖】1、共和黨的黨色是紅色,標志是大象 共和黨現在是美國保守力量的代表,小布什任總統,反對墮胎、同性婚姻和干細胞研究,主張減稅和加強軍隊防御力量消滅支持恐怖主義嫌疑的國家,攻打阿富汗和伊拉克即是證明。2、民主黨的顏色是藍色,黨符號是驢。3、美國民主黨沒有固定黨員,黨籍自由。4、黨員總數按本黨總統候選人投票的結果計算 民主黨代表自由主義思想。本文就為大家分享到這里,希望小伙伴們會喜歡。...

          (資料圖片)2022年雙十一全平臺GMV yoy +13.7%。根據星圖的數據顯示,雙十一大促期間(10 月31 日20:00-11 月11 日23:59)綜合電商平臺、直播平臺累積銷售額為11154 億元,yoy +13.7%,其中綜合電商平臺總計銷售額為9340 億元,yoy +2.9%,基本維持不變;直播電商銷售額為1814 億元,yoy +146.1%??爝f數據方面,據數據顯示,11 月1...

          TOP
          国产初高中生视频在线观看|亚洲一区中文|久久亚洲欧美国产精品|黄色网站入口免费进人
          1. <nobr id="easjo"><address id="easjo"></address></nobr>

              <track id="easjo"><source id="easjo"></source></track>
              1. 
                

              2. <bdo id="easjo"><optgroup id="easjo"></optgroup></bdo>
              3. <track id="easjo"><source id="easjo"><em id="easjo"></em></source></track><option id="easjo"><span id="easjo"><em id="easjo"></em></span></option>