easyswoole - 基于swoole扩展实现的一款高性能php框架

Swoole的生命周期


php-fpm中的生命周期


傳統基于php-fpm的web開發通常淡化了全局期變量的影響,這對于開發者而言,顯然是降低了許多上手難度的;但也導致了許多新人對全局期變量會產生的影響沒有深刻理解。

我們知道,php-fpm收到請求后會分配一個work進程去處理這條請求,而work會去讀取并執行.php文件(在通常情基于框架的開發中,這個.php文件可能是index.php)。也就是說在傳統模式中,每個請求都是獨立在自己的進程中執行的,因為進程是隔離的而php-fpm又是同步阻塞的,所以我們可以很好的清楚和了解是誰在什么時候創建了變量、修改了變量、銷毀了變量。

簡單舉個例子

可可醬是商店的一名售貨員,這個店只有他一個人。當客戶來了之后需要購買一瓶可樂,可可醬檢查了貨架確認有可樂,隨后告訴客戶這瓶可樂價格是¥3.5元,客戶付錢給可可醬,可可醬收到錢后把可樂交給了客戶。

后來發現客人太多,只有可可醬一個人的時候后面的客戶需要排隊很久,于是老板決定再雇一名售貨員,于是加入了小明。

還是上面的場景,但是由于小明的加入,小明和可可醬同時接待了2名客戶,可可醬檢查了貨架確認還有一箱可樂的時候,和客人溝通可樂的價格時,小明的客戶需要購買一箱可樂,于是小明就取走了一箱可樂,當可可醬收了錢準備拿可樂的時候,發現沒有可樂了,然后被客戶打了一頓。

在上面的場景中,就是一個變量被修改而導致后續邏輯混亂的場景,在傳統的fpm開發中,往往只會在訪問數據庫的時候出現這種場景。但是如果假設一個fpm進程可以同時處理多條請求的時候,你如果將用戶信息存放在全局變量中,那么你就無法再可靠的判斷當前用戶是誰了。

swoole_server中對象的4層生命周期


以下內容摘自swoole文檔

開發swoole程序與普通LAMP下編程有本質區別。在傳統的Web編程中,PHP程序員只需要關注request到達,request結束即可。而在swoole程序中程序員可以操控更大范圍,變量/對象可以有四種生存周期。

變量、對象、資源、require/include的文件等下面統稱為對象

程序全局期

swoole_server->start之前就創建好的對象,我們稱之為程序全局生命周期。這些變量在程序啟動后就會一直存在,直到整個程序結束運行才會銷毀。

有一些服務器程序可能會連續運行數月甚至數年才會關閉/重啟,那么程序全局期的對象在這段時間持續駐留在內存中的。程序全局對象所占用的內存是Worker進程間共享的,不會額外占用內存。

這部分內存會在寫時分離(COW),在Worker進程內對這些對象進行寫操作時,會自動從共享內存中分離,變為進程全局對象。

程序全局期include/require的代碼,必須在整個程序shutdown時才會釋放,reload無效

進程全局期

swoole擁有進程生命周期控制的機制,一個Worker子進程處理的請求數超過max_request配置后,就會自動銷毀。Worker進程啟動后創建的對象(onWorkerStart中創建的對象),在這個子進程存活周期之內,是常駐內存的。onConnect/onReceive/onClose 中都可以去訪問它。

進程全局對象所占用的內存是在當前子進程內存堆的,并非共享內存。對此對象的修改僅在當前Worker進程中有效
進程期include/require的文件,在reload后就會重新加載

會話期

onConnectonClose是一次TCP的會話周期,http keep-alive時,一個連接可能會有多個request。 http是無狀態的,一個用戶可能也不止一個連接,可以通過創建一個session來關聯同一個用戶的不同請求。

請求期

請求期就是指一個完整的請求發來,也就是onReceive收到請求開始處理,直到返回結果發送response。這個周期所創建的對象,會在請求完成后銷毀。

swoole中請求期對象與普通PHP程序中的對象就是一樣的。請求到來時創建,請求結束后銷毀。

總結


在Swoole中,一個work進程處理完請求后并不會銷毀(甚至可能同時處理多個請求),所以務必要明確你創建的變量的生命周期,以防止出現邏輯上的問題。

主站蜘蛛池模板: 江苏华海诚科新材料有限公司、连云港华海诚科新材料有限公司、连云港新材料 | 深圳市中控智能科技有限公司 | 芜湖表面处理-涂装-精密加工-阳极氧化-芜湖研历光电科技有限公司 | 展会设计搭建-展厅设计施工公司-展位展台设计搭建-深圳鼎泰展览 展柜设计定制-品牌展柜订做-展柜制作厂家「广州嘉艺展柜」 | 意优教育|意大利留学中介_意大利留学费用_意大利申请条件_北京意大利语培训学校 | 机器人码垛机-纸箱套袋机-水平缠绕机-贴标机-开箱机-装盒机-杭州贝立智能设备有限公司 | 郑州四棉纺织有限公司-现代化纺织企业 | 青州市科信水处理设备有限公司-ic卡水处理设备厂家-畜牧养殖水处理设备 | 深圳五洲中医院_深圳好的中医院_深圳市医保定点医院[官网] | 天力普电力科技有限公司 | 搅拌摩擦焊-搅拌摩擦焊接机床-搅拌摩擦焊设备厂家-精科大恒 | 深圳车牌识别系统厂家_人脸识别厂家_通道闸厂家_车位引导系统_智慧社区管理系统_深圳市利普诺科技有限公司官网 | 深圳专卖店设计,餐饮空间设计,酒店空间策划设计【左右高端人文空间设计公司】 | 泡沫|水罐|干粉消防车价格_特种消防洒水车厂家-湖北江南 | 石笼网|镀锌石笼网|石笼网价格|包胶涂塑石笼网箱-河北海峰石笼网厂 | 深圳理津技术有限公司(REHLOGY)-全球工业品供应商:自动化产品|仪器仪表|设备|备品备件|工具|消耗品|非标设备|建筑工程等一站式综合服务! | 混凝土修补-清水混凝土保护剂-仿清水混凝土-混凝土装修-混凝土色差处理-混凝土色差修复剂-德州唐荣建筑装饰工程有限公司 | 湿电电源,静电除尘电源,电捕焦电源-山东仕瑞电气科技有限公司 | 智能电磁流量计-超声波流量计-涡街流量计-液体涡轮流量计-大连计测机器有限公司 | 人工草坪_施工围挡_体育场围网-人工草坪厂家菲斯福 | 天津市力豹润滑科技有限公司 | 景县泉兴永塔业有限公司-广播电视塔、通信塔、电力塔、交通设施、监控杆塔、气象塔、森林防火瞭望塔、避雷塔、烟筒塔、训练塔 | 全自动灌装机械设备-迈驰粉末/颗粒/液体/膏体灌装机械设备流水线生产厂家 | 煤泥烘干机,酒糟烘干机,药渣烘干机,酵母烘干机,烘干机厂家-瑞奥新能源 | 萍乡市耀天化工有限公司| 南京叉车|电瓶叉车|电动叉车|电动堆高车|电动搬运车-南京诺嘉机械 | 铜排,异型紫棒,紫铜棒,紫铜微孔管,异型黄管,黄铜管,异形紫管,紫铜管,焊接铜管,散热器铜管,电力铜管_河间市通海铜业有限公司 | 极限软件园-绿色免费软件下载站 吉林市康艺商贸有限公司_吉林市康艺商贸有限公司 | 山东临沂春鑫新能源科技有限公司|官网|生物质颗粒锅炉|燃气锅炉|水源热泵 | 宁波搬家_宁波搬家公司_宁波搬厂_专业搬家搬厂-「宁波喜洋洋搬家公司」 | 全地形消防摩托车_背负式细水雾_全氟己酮灭火装置「斯库尔消防」 | 木工圆锯片,进口锯片厂家,合金锯片生产厂家,木工合金锯片,BAK(百恪)刀具有限公司 | 耐磨焊丝厂-堆焊焊材研发-修复工程-天津舜荣焊材官网 | 洒水车|冷藏车|LED广告车|油罐车|道路救援车|垃圾车|程力专用汽车股份有限公司销售九分公司 | 重庆聚成达汽车有限公司-重庆吸污净化车 | 西安真石漆_无机涂料厂家_无机涂料多少钱一个平方—陕西秦森环保科技有限公司 | 营口新北方制糖有限公司 | 氢能-燃料电池-电堆-中国氢能与燃料电池网企业最佳宣传推广平台 轻质隔墙板厂家-加气隔墙板_grc轻质隔墙板_空心实心复合隔墙板_水泥混凝土轻质隔墙板批发价格 | 维启科技-创造科技的无限可能 | 上海维启信息技术有限公司 建筑仿真 BIM 虚拟现实 VR AR 顶岗实习 建筑智能模型 | 威海保温板,威海泡沫,威海EPS,威海EPP-威海东兴泡塑科技有限公司 | 亿企商贸-亿万企业的商务贸易平台-B2B企业产品发布供求信息平台,一带一路中国企业及产品展示平台,免费企业智能自助建站网络营销推广平台,打造B2B企业黄页产品信息发布推广专业综合电子商务平台! |