<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        你對swoole的進程,線程知道多少

        來源:懂視網 責編:小采 時間:2020-11-27 13:59:31
        文檔

        你對swoole的進程,線程知道多少

        你對swoole的進程,線程知道多少:swoole教程欄目介紹swoole的進程,線程。推薦(免費):swoole教程進程1、進程之間不共享任何狀態 2、進程的調度由操作系統完成 3、每個進程都有自己獨立的內存空間 4、進程間通訊主要是通過信號傳遞的方式來實現的,實現方式有多種,信號量、管道、事件等,
        推薦度:
        導讀你對swoole的進程,線程知道多少:swoole教程欄目介紹swoole的進程,線程。推薦(免費):swoole教程進程1、進程之間不共享任何狀態 2、進程的調度由操作系統完成 3、每個進程都有自己獨立的內存空間 4、進程間通訊主要是通過信號傳遞的方式來實現的,實現方式有多種,信號量、管道、事件等,

        swoole教程欄目介紹swoole的進程,線程。

        推薦(免費):swoole教程
        進程

        1、進程之間不共享任何狀態
        2、進程的調度由操作系統完成
        3、每個進程都有自己獨立的內存空間
        4、進程間通訊主要是通過信號傳遞的方式來實現的,實現方式有多種,信號量、管道、事件等,任何一種方式的通訊效率都需要過內核,導致通訊效率比較低
        5、由于是獨立的內存空間,上下文切換的時候需要保存先調用棧的信息、cpu各寄存器的信息、虛擬內存、以及打開的相關句柄等信息,所以導致上下文進程間切換開銷很大,通訊麻煩。

        線程

        1、線程之間共享變量,解決了通訊麻煩的問題對于變量的訪問需要鎖
        2、一個進程可以擁有多個線程,但是其中每個線程會共享父進程像操作系統申請資源,這個包括虛擬內存、文件等,由于是共享資源,所以創建線程所需要的系統資源占用比進程小很多,相應的可創建的線程數量也變得相對多很多。
        3、另外在調度方面也是由于內存是共享的,所以上下文切換的時候需要保存的東西就像對少一些,這樣一來上下文的切換也變得高效。

        解釋
      1. 通過php,運行一個php文件,這個時候就相當于我們創建了一個進程,這個進程會在系統中駐存,申請屬于它自己的內存空間系統資源并且運行相應的程序。
        在這里插入圖片描述
      2. swoole進程

        在這里插入圖片描述
        1、Master進程:主進程
        2、Manger進程:管理進程
        3、Worker進程:工作進程
        4、Task進程:異步任務工作進程

      3. 第一層,Master進程,這個是swoole的主進程,這個進程是用于處理swoole的核心事件驅動的,那么在這個進程當中可以看到它擁有一個MainReactor[線程]以及若干個Reactor[線程],swoole所有對于事件的監聽都會在這些線程中實現,比如來自客戶端的連接,信號處理等。

      4. 1.1、MainReactor(主線程)
        主線程會負責監聽server socket,如果有新的連接accept,主線程會評估每個Reactor線程的連接數量。將此連接分配給連接數最少的reactor線程,做一個負載均衡。

      5. 1.2 、Reactor線程組
        Reactor線程負責維護客戶端機器的TCP連接、處理網絡IO、收發數據完全是異步非阻塞的模式。
        swoole的主線程在Accept新的連接后,會將這個連接分配給一個固定的Reactor線程,在socket可讀時讀取數據,并進行協議解析,將請求投遞到Worker進程。在socket可寫時將數據發送給TCP客戶端。

      6. 1.3、心跳包檢測線程(HeartbeatCheck)
        Swoole配置了心跳檢測之后,心跳包線程會在固定時間內對所有之前在線的連接
        發送檢測數據包

      7. 1.4、UDP收包線程(UdpRecv)
        接收并且處理客戶端udp數據包

      8. swoole想要實現最好的性能必須創建出多個工作進程幫助處理任務,但Worker進程就必須fork操作,但是fork操作是不安全的,如果沒有管理會出現很多的僵尸進程,進而影響服務器性能,同時worker進程被誤殺或者由于程序的原因會異常退出,為了保證服務的穩定性,需要重新創建worker進程。

      9. Swoole在運行中會創建一個單獨的管理進程,所有的worker進程和task進程都是從管理進程Fork出來的。管理進程會監視所有子進程的退出事件,當worker進程發生致命錯誤或者運行生命周期結束時,管理進程會回收此進程,并創建新的進程。換句話也就是說,對于worker、task進程的創建、回收等操作全權有“保姆”Manager進程進行管理

      10. worker 進程屬于swoole的主邏輯進程,用戶處理客戶端的一系列請求,接受由Reactor線程投遞的請求數據包,并執行PHP回調函數處理數據生成響應數據并發給Reactor線程,由Reactor線程發送給TCP客戶端可以是異步非阻塞模式,也可以是同步阻塞模式

      11. taskWorker進程這一進城是swoole提供的異步工作進程,這些進程主要用于處理一些耗時較長的同步任務,在worker進程當中投遞過來。

      12. client跟server的交互:

        1、client請求到達 Main Reactor,Client實際上是與Master進程中的某個Reactor線程發生了連接。

        2、Main Reactor根據Reactor的情況,將請求注冊給對應的Reactor (每個Reactor都有epoll。用來監聽客戶端的變化)

        3、客戶端有變化時Reactor將數據交給worker來處理

        4、worker處理完畢,通過進程間通信(比如管道、共享內存、消息隊列)發給對應的reactor。

        5、reactor將響應結果發給相應的連接請求處理完成

        Master進程內的回調函數
      13. onStart Server啟動在主進程的主線程回調此函數
      14. onShutdown 此事件在Server正常結束時發生
      15. Manager進程內的回調函數
      16. onManagerStart 當管理進程啟動時調用它
      17. onManagerStop 當管理進程結束時調用它
      18. onWorkerError 當worker/task_worker進程發生異常后會在Manager進程內回調此函數
      19. Worker進程內的回調函數
      20. onWorkerStart 此事件在Worker進程/Task進程啟動時發生
      21. onWorkerStop 此事件在worker進程終止時發生。
      22. onConnect 有新的連接進入時,在worker進程中回調
      23. onClose TCP客戶端連接關閉后,在worker進程中回調此函數
      24. onReceive 接收到數據時回調此函數,發生在worker進程中
      25. onPacket 接收到UDP數據包時回調此函數,發生在worker進程中
      26. onFinish 當worker進程投遞的任務在task_worker中完成時,task進程會通過finish()方法將任務處理的結果發送給worker進程。
      27. onWorkerExit 僅在開啟reload_async特性后有效。異步重啟特性
      28. onPipeMessage 當工作進程收到由 sendMessage 發送的管道消息時會觸發事件
      29. Task進程內的回調函數
      30. onTask 在task_worker進程內被調用。worker進程可以使用swoole_server_task函數向task_worker進程投遞新的任務
      31. onWorkerStart 此事件在Worker進程/Task進程啟動時發生
      32. onPipeMessage 當工作進程收到由 sendMessage 發送的管道消息時會觸發事件
      33. 簡單說明:
      34. 1、服務器關閉程序終止時最后一次事件是onShutdown。
      35. 2、服務器啟動成功后,onStart/onManagerStart/onWorkerStart會在不同的進程內并發執行,并不是順序的。
      36. 3、所有事件回調均在$server->start后發生,start之后寫的代碼是無效代碼。
      37. 4、onStart/onManagerStart/onWorkerStart 3個事件的執行順序是不確定的
      38. swoole運行流程圖

        在這里插入圖片描述

        <?php//tcp協議$server=new Swoole\Server("0.0.0.0",9800); //創建server對象$server->set([
         'worker_num'=>3, //設置進程
         //'heartbeat_idle_time'=>10,//連接最大的空閑時間
         //'heartbeat_check_interval'=>3 //服務器定時檢查
         'open_length_check'=>1,
         'package_length_type'=>'N',//設置包頭的長度
         'package_length_offset'=>0, //包長度從哪里開始計算
         'package_body_offset'=>4, //包體從第幾個字節開始計算
         'package_max_length'=>1024 * 1024 * 2,]);$server->on("Start",function (){
        
         var_dump(1);
         //設置主進程的名稱
         swoole_set_process_name("server-process:master");});//服務關閉時候觸發(信號)$server->on("shutdown",function (){});//當管理進程啟動時調用它$server->on('ManagerStart',function (){
         var_dump(2);
         //swoole_set_process_name("server-process:manger");});$server->on('WorkerStart',function ($server,$workerId){
         // swoole_set_process_name("server-process:worker");
         var_dump(3);});//監聽事件,連接事件(woker進程當中)$server->on('connect',function ($server,$fd){
         echo "新的連接進入:{$fd}".PHP_EOL;});//消息發送過來(woker進程當中)$server->on('receive',function (swoole_server $server, int $fd, int $reactor_id, string $data){
         //var_dump("消息發送過來:".$data);
         //服務端});//消息關閉$server->on('close',function (){
         echo "消息關閉".PHP_EOL;});//服務器開啟$server->start();echo '123456';
        進程

        1、進程之間不共享任何狀態
        2、進程的調度由操作系統完成
        3、每個進程都有自己獨立的內存空間
        4、進程間通訊主要是通過信號傳遞的方式來實現的,實現方式有多種,信號量、管道、事件等,任何一種方式的通訊效率都需要過內核,導致通訊效率比較低
        5、由于是獨立的內存空間,上下文切換的時候需要保存先調用棧的信息、cpu各寄存器的信息、虛擬內存、以及打開的相關句柄等信息,所以導致上下文進程間切換開銷很大,通訊麻煩。

        線程

        1、線程之間共享變量,解決了通訊麻煩的問題對于變量的訪問需要鎖
        2、一個進程可以擁有多個線程,但是其中每個線程會共享父進程像操作系統申請資源,這個包括虛擬內存、文件等,由于是共享資源,所以創建線程所需要的系統資源占用比進程小很多,相應的可創建的線程數量也變得相對多很多。
        3、另外在調度方面也是由于內存是共享的,所以上下文切換的時候需要保存的東西就像對少一些,這樣一來上下文的切換也變得高效。

        解釋
      39. 通過php,運行一個php文件,這個時候就相當于我們創建了一個進程,這個進程會在系統中駐存,申請屬于它自己的內存空間系統資源并且運行相應的程序。
        在這里插入圖片描述
      40. swoole進程

        在這里插入圖片描述
        1、Master進程:主進程
        2、Manger進程:管理進程
        3、Worker進程:工作進程
        4、Task進程:異步任務工作進程

      41. 第一層,Master進程,這個是swoole的主進程,這個進程是用于處理swoole的核心事件驅動的,那么在這個進程當中可以看到它擁有一個MainReactor[線程]以及若干個Reactor[線程],swoole所有對于事件的監聽都會在這些線程中實現,比如來自客戶端的連接,信號處理等。

      42. 1.1、MainReactor(主線程)
        主線程會負責監聽server socket,如果有新的連接accept,主線程會評估每個Reactor線程的連接數量。將此連接分配給連接數最少的reactor線程,做一個負載均衡。

      43. 1.2 、Reactor線程組
        Reactor線程負責維護客戶端機器的TCP連接、處理網絡IO、收發數據完全是異步非阻塞的模式。
        swoole的主線程在Accept新的連接后,會將這個連接分配給一個固定的Reactor線程,在socket可讀時讀取數據,并進行協議解析,將請求投遞到Worker進程。在socket可寫時將數據發送給TCP客戶端。

      44. 1.3、心跳包檢測線程(HeartbeatCheck)
        Swoole配置了心跳檢測之后,心跳包線程會在固定時間內對所有之前在線的連接
        發送檢測數據包

      45. 1.4、UDP收包線程(UdpRecv)
        接收并且處理客戶端udp數據包

      46. swoole想要實現最好的性能必須創建出多個工作進程幫助處理任務,但Worker進程就必須fork操作,但是fork操作是不安全的,如果沒有管理會出現很多的僵尸進程,進而影響服務器性能,同時worker進程被誤殺或者由于程序的原因會異常退出,為了保證服務的穩定性,需要重新創建worker進程。

      47. Swoole在運行中會創建一個單獨的管理進程,所有的worker進程和task進程都是從管理進程Fork出來的。管理進程會監視所有子進程的退出事件,當worker進程發生致命錯誤或者運行生命周期結束時,管理進程會回收此進程,并創建新的進程。換句話也就是說,對于worker、task進程的創建、回收等操作全權有“保姆”Manager進程進行管理

      48. worker 進程屬于swoole的主邏輯進程,用戶處理客戶端的一系列請求,接受由Reactor線程投遞的請求數據包,并執行PHP回調函數處理數據生成響應數據并發給Reactor線程,由Reactor線程發送給TCP客戶端可以是異步非阻塞模式,也可以是同步阻塞模式

      49. taskWorker進程這一進城是swoole提供的異步工作進程,這些進程主要用于處理一些耗時較長的同步任務,在worker進程當中投遞過來。

      50. client跟server的交互:

        1、client請求到達 Main Reactor,Client實際上是與Master進程中的某個Reactor線程發生了連接。

        2、Main Reactor根據Reactor的情況,將請求注冊給對應的Reactor (每個Reactor都有epoll。用來監聽客戶端的變化)

        3、客戶端有變化時Reactor將數據交給worker來處理

        4、worker處理完畢,通過進程間通信(比如管道、共享內存、消息隊列)發給對應的reactor。

        5、reactor將響應結果發給相應的連接請求處理完成

        Master進程內的回調函數
      51. onStart Server啟動在主進程的主線程回調此函數
      52. onShutdown 此事件在Server正常結束時發生
      53. Manager進程內的回調函數
      54. onManagerStart 當管理進程啟動時調用它
      55. onManagerStop 當管理進程結束時調用它
      56. onWorkerError 當worker/task_worker進程發生異常后會在Manager進程內回調此函數
      57. Worker進程內的回調函數
      58. onWorkerStart 此事件在Worker進程/Task進程啟動時發生
      59. onWorkerStop 此事件在worker進程終止時發生。
      60. onConnect 有新的連接進入時,在worker進程中回調
      61. onClose TCP客戶端連接關閉后,在worker進程中回調此函數
      62. onReceive 接收到數據時回調此函數,發生在worker進程中
      63. onPacket 接收到UDP數據包時回調此函數,發生在worker進程中
      64. onFinish 當worker進程投遞的任務在task_worker中完成時,task進程會通過finish()方法將任務處理的結果發送給worker進程。
      65. onWorkerExit 僅在開啟reload_async特性后有效。異步重啟特性
      66. onPipeMessage 當工作進程收到由 sendMessage 發送的管道消息時會觸發事件
      67. Task進程內的回調函數
      68. onTask 在task_worker進程內被調用。worker進程可以使用swoole_server_task函數向task_worker進程投遞新的任務
      69. onWorkerStart 此事件在Worker進程/Task進程啟動時發生
      70. onPipeMessage 當工作進程收到由 sendMessage 發送的管道消息時會觸發事件
      71. 簡單說明:
      72. 1、服務器關閉程序終止時最后一次事件是onShutdown。
      73. 2、服務器啟動成功后,onStart/onManagerStart/onWorkerStart會在不同的進程內并發執行,并不是順序的。
      74. 3、所有事件回調均在$server->start后發生,start之后寫的代碼是無效代碼。
      75. 4、onStart/onManagerStart/onWorkerStart 3個事件的執行順序是不確定的
      76. swoole運行流程圖

        在這里插入圖片描述

        <?php//tcp協議$server=new Swoole\Server("0.0.0.0",9800); //創建server對象$server->set([
         'worker_num'=>3, //設置進程
         //'heartbeat_idle_time'=>10,//連接最大的空閑時間
         //'heartbeat_check_interval'=>3 //服務器定時檢查
         'open_length_check'=>1,
         'package_length_type'=>'N',//設置包頭的長度
         'package_length_offset'=>0, //包長度從哪里開始計算
         'package_body_offset'=>4, //包體從第幾個字節開始計算
         'package_max_length'=>1024 * 1024 * 2,]);$server->on("Start",function (){
        
         var_dump(1);
         //設置主進程的名稱
         swoole_set_process_name("server-process:master");});//服務關閉時候觸發(信號)$server->on("shutdown",function (){});//當管理進程啟動時調用它$server->on('ManagerStart',function (){
         var_dump(2);
         //swoole_set_process_name("server-process:manger");});$server->on('WorkerStart',function ($server,$workerId){
         // swoole_set_process_name("server-process:worker");
         var_dump(3);});//監聽事件,連接事件(woker進程當中)$server->on('connect',function ($server,$fd){
         echo "新的連接進入:{$fd}".PHP_EOL;});//消息發送過來(woker進程當中)$server->on('receive',function (swoole_server $server, int $fd, int $reactor_id, string $data){
         //var_dump("消息發送過來:".$data);
         //服務端});//消息關閉$server->on('close',function (){
         echo "消息關閉".PHP_EOL;});//服務器開啟$server->start();echo '123456';

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        你對swoole的進程,線程知道多少

        你對swoole的進程,線程知道多少:swoole教程欄目介紹swoole的進程,線程。推薦(免費):swoole教程進程1、進程之間不共享任何狀態 2、進程的調度由操作系統完成 3、每個進程都有自己獨立的內存空間 4、進程間通訊主要是通過信號傳遞的方式來實現的,實現方式有多種,信號量、管道、事件等,
        推薦度:
        標簽: 知道 了解 進程
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 七次郎成人免费线路视频| 亚洲美女色在线欧洲美女| 亚洲熟妇成人精品一区| 男人进去女人爽免费视频国产 | 久久久久久免费视频| 亚洲精品无码久久久久sm| 一级毛片免费在线| 免费萌白酱国产一区二区| 亚洲国产精品成人AV在线| 亚洲免费福利在线视频| 精品亚洲成a人片在线观看少妇| 成全在线观看免费观看大全| 亚洲色精品vr一区二区三区| 在线观看免费无码视频| 国产成人99久久亚洲综合精品 | 久久久久高潮毛片免费全部播放| 亚洲精品无码久久一线| 国产一区二区免费视频| 亚洲av无码乱码国产精品fc2| 久久久久免费精品国产| 久久精品国产亚洲av高清漫画| 美丽姑娘免费观看在线观看中文版 | 国产精品亚洲A∨天堂不卡| 中文字幕免费播放| 亚洲2022国产成人精品无码区| 91精品免费观看| 亚洲六月丁香六月婷婷蜜芽| 最近最新MV在线观看免费高清| 精品丝袜国产自在线拍亚洲| 在线视频免费观看www动漫| 亚洲丁香婷婷综合久久| 亚洲AV蜜桃永久无码精品| 国产乱子伦精品免费视频| 久久亚洲伊人中字综合精品| 222www免费视频| 亚洲精品无码专区在线播放| 免费人成年激情视频在线观看| 成人自慰女黄网站免费大全 | 亚洲国产精品国产自在在线| 国色精品va在线观看免费视频| 老色鬼久久亚洲AV综合|