資料介紹
軟件簡介
Swow 是一個使用 PHP 和 C 編寫的高性能純協(xié)程網(wǎng)絡(luò)通信引擎。它致力于使用最小C核心及多數(shù)PHP代碼以支持PHP高性能網(wǎng)絡(luò)編程。
協(xié)程
Swow實現(xiàn)了一套有史以來最完整的PHP協(xié)程模型,它全面釋放了PHP的真正實力,使得開發(fā)者可以做到以往難以想象的事情。
高性能
支持每秒百萬次上下文切換。且由于Swow支持純C協(xié)程與PHP協(xié)程混合運行,兩者之間僅進行C棧單棧上下文切換,且Swow的事件調(diào)度器就是純C協(xié)程,因此大部分協(xié)程切換都是單棧切換,其切換速度遠超C + PHP的雙棧切換。
高可控
現(xiàn)在協(xié)程可以使得PHP虛擬機像一個迷你操作系統(tǒng)一樣,其中運行的協(xié)程近似于操作系統(tǒng)的進程/線程,開發(fā)者能夠以超細粒度任意操控這些協(xié)程,如查看所有協(xié)程的運行狀態(tài)、attach進入?yún)f(xié)程、單步調(diào)試跟蹤、查看協(xié)程棧乃至每個棧幀、查看或修改協(xié)程內(nèi)變量、中斷協(xié)程或殺死協(xié)程等。
基于這樣的可控性,開發(fā)者還可以借助WatchDog組件對陷入死循環(huán)或處于IO阻塞的協(xié)程進行警報、中斷、讓出甚至殺死等多種處理,以避免個別協(xié)程影響到程序整體穩(wěn)定性。
并且,其與進程設(shè)計哲學的契合性,也決定了協(xié)程應(yīng)用的健壯性極佳。正如單個進程的崩潰不會導(dǎo)致整個系統(tǒng)的崩潰一樣,單個協(xié)程的崩潰也不會導(dǎo)致整個進程的崩潰,并且得益于PHP強大的異常機制和資源管理能力,與協(xié)程綁定的相關(guān)資源都能被安全地釋放。你無需再為未捕獲的異常殫精竭力,也不要再去捕獲Throwable,遇到未知的錯誤請Let it crash。
易兼容
無需創(chuàng)建協(xié)程也無需判斷是否在協(xié)程環(huán)境,在Swow中,所及之處,皆為協(xié)程,打開編輯器,即刻就可以開始書寫你的代碼!這也意味著它將更好地兼容已有的生態(tài),我們再也不需要為PHPUnit重寫一個由協(xié)程包裹的入口。
事件驅(qū)動
Swow基于協(xié)程事件庫libcat開發(fā),libcat又基于異步事件庫libuv開發(fā),得益于此,我們擁有了經(jīng)過工業(yè)級驗證的事件循環(huán)驅(qū)動,并且它支持幾乎所有常見操作系統(tǒng)。因此,Swow也是首個能在原生Windows平臺運行,且通過IOCP驅(qū)動的PHP協(xié)程網(wǎng)絡(luò)編程引擎。由于libuv遵循Proactor模型,不久后我們又可以在Linux下免費獲得由新特性io_uring帶來的可觀性能提升。
PHP可編程性
最小C核心意味著底層不再包攬所有事務(wù),而是僅提供最細粒度的基礎(chǔ)接口,即擴展層不再像是一個框架(framework),而更像是庫(library),這將使PHP的編程能力最大化。
且隨著PHP8和JIT的到來,我們?yōu)槭裁催€要大量使用C或是C++來完成那些PHP也能做到的工作呢?更多地使用PHP而不是C、C++,也契合了PHP內(nèi)核的未來發(fā)展方向。
更強的可編程性也帶來了更多的可能性。試想一下,曾經(jīng)你想寫一個簡單的WAF程序,通過檢測IP或是解析HTTP頭部來實施一些鑒權(quán)操作,但當你在回調(diào)中拿到請求對象時,底層已經(jīng)替你完成了整個請求的接收,龐大的HTTP報文解析或許已經(jīng)損害了你的程序性能。
但現(xiàn)在,Swow提供的Buffer模塊使得PHP可以像C一樣精細地進行內(nèi)存管理,結(jié)合Socket模塊和一些協(xié)議解析器,它允許你掌握小到每個字節(jié)的接收和解析,或許在未來開發(fā)者完全可以使用Swow編寫高性能的網(wǎng)關(guān)程序,一切都可以通過PHP編程的方式改變,且它們?nèi)际莾?nèi)存安全的。
現(xiàn)代化
面向?qū)ο?/h3>
Swow在面向?qū)ο蟮牡缆飞虾蚉HP的進化路線如出一轍,不管是早期的PHP或是其它有悠久歷史的擴展,對于API的設(shè)計大都是面向過程的,而經(jīng)過多年發(fā)展,PHP社區(qū)早已是面向?qū)ο蟮奶煜?,PHP也為內(nèi)建API的面向?qū)ο笾С侄恍概ΑC嫦驅(qū)ο笫沟梦覀兛梢愿玫鼗赟wow庫進行二次封裝,我們可以直接繼承內(nèi)部類并實現(xiàn)PSR接口以0成本支持PSR規(guī)范,這在實際應(yīng)用中讓我們的程序性能得到了極大的提升。
擁抱異常
Swow在錯誤處理方面和PHP的改革理念也是一致的,PHP8干掉了大量的notice、warning、error,轉(zhuǎn)而使用基于異常機制的Error/Exception,極大地增強了程序的健壯性(不要再讓錯誤的程序繼續(xù)運行下去)。
曾經(jīng)我們要求開發(fā)者在每個IO操作后檢查返回值,否則程序就可能陷入非預(yù)期的錯誤狀態(tài)中,這樣的編碼方式,無異于是一種歷史的倒退,干掉if ($err != null)
,擁抱異常機制,才是正確的發(fā)展道路。
而基于上述改進,我們現(xiàn)在能以鏈式調(diào)用的方式書寫代碼,使代碼變得更加簡潔且富有節(jié)奏感。
綠色增強
Swow和Opcache非常相似,兩者都允許開發(fā)者在幾乎不改變代碼的情況下,僅通過開啟擴展就能使得應(yīng)用程序獲得免費大量的能力提升。即保證相同的代碼具有一致的輸出結(jié)果,但它們在底層所運行的指令或是系統(tǒng)調(diào)用可能不盡相同。
因此,Swow理所當然地支持所有SAPI(CLI,F(xiàn)PM等)。但需要注意的是,受制于FPM的模型,你無法簡單地通過開啟Swow直接獲得性能上的提升,但它仍能在功能上對FPM進行增強(如并發(fā)請求接口、執(zhí)行異步任務(wù)等)。
此外,即使是傳統(tǒng)的同步阻塞應(yīng)用,也可以使用Swow生態(tài)下的應(yīng)用組件,如使用Swow提供的Debugger工具對程序進行斷點調(diào)試分析等。
線程安全
Swow支持在PHP的ZTS(Zend Thread Safety)版本下運行,即基于內(nèi)存隔離的多線程支持。
這意味著它可以和parallel、pthreads等多線程擴展很好地結(jié)合使用,但Swow本身不會提供任何多線程支持。
學習成本
Swow是否又是一個全新的輪子?答案是否定的。如果你熟悉如Swoole這樣的協(xié)程庫,那么你幾乎無需任何學習成本就可以上手Swow,反之,Swow可能更易于上手,因為它更現(xiàn)代化,面向?qū)ο?、異常機制、純協(xié)程、零異步回調(diào)等一切特性都只為了讓你的編碼更加從容優(yōu)雅。
此外,如果你的項目使用了社區(qū)流行協(xié)程框架,那么它的升級成本可能僅和由PHP5升級到PHP7相當,并且你還可能因此獲得20%的免費性能提升和可觀的內(nèi)存占用縮減。
現(xiàn)階段的Swow非常適合技術(shù)先驅(qū)和極客們嘗鮮,它將走在PHP異步協(xié)程技術(shù)的前沿,擁抱變化甚至引領(lǐng)變化。
編程理念
Swow遵循CSP的并發(fā)模型,而不是Callback模型。在實現(xiàn)上來說,協(xié)程是異步回調(diào)的超集,通過創(chuàng)建新的協(xié)程可以模擬異步回調(diào),而反之則不行。
兩個問題
Swoole/Swow對于并發(fā)網(wǎng)絡(luò)編程支持的技術(shù)抉擇終結(jié)于克服兩個巨大的現(xiàn)實技術(shù)難題:一個是回調(diào)地獄,另一個是生態(tài)。
一個選擇
PHP異步網(wǎng)絡(luò)編程技術(shù)的奠基者Swoole早期就嘗試了異步回調(diào)模型,但在實際開發(fā)中該技術(shù)常常制造出難以維護的代碼,而協(xié)程技術(shù)可以解決嵌套異步回調(diào)代碼可維護性極差的問題并減輕開發(fā)者的心智負擔。
而選擇有棧協(xié)程技術(shù)而不是無棧協(xié)程,則是為了更好地復(fù)用已有的龐大的PHP生態(tài)。在這一點上,其它已知的異步事件庫都走在了與PHP原有生態(tài)更加割裂的方向上。在Swow中,我們可以完美復(fù)用大量的PHP網(wǎng)絡(luò)設(shè)施庫及基于它們開發(fā)的海量PHP包支持而無需修改任何代碼。
協(xié)程思維
此外,在純協(xié)程的編程理念中,我們不應(yīng)再以異步回調(diào)的方式去思考代碼實現(xiàn)。以實現(xiàn)一個有限次數(shù)的定時任務(wù)為例,我們不再應(yīng)該先想到異步定時器,使用異步定時器實現(xiàn)我們需要借助全局變量上下文保存狀態(tài)并對其計數(shù),在執(zhí)行指定次數(shù)后刪除定時器,而在協(xié)程的方式下,我們只是簡單地新建一個協(xié)程并for循環(huán)指定次數(shù),每次循環(huán)通過sleep()掛起指定的時間,再執(zhí)行任務(wù)。
顯然協(xié)程方式的好處是代碼直觀且上下文信息不會丟失。異步定時器的每次執(zhí)行都需要一個全新的回調(diào)堆棧,在異步混合協(xié)程的實現(xiàn)下,每次回調(diào)都必須創(chuàng)建一個新的協(xié)程,此時純協(xié)程實現(xiàn)的各種好處就不言而喻了。
- 非連續(xù)數(shù)據(jù)網(wǎng)絡(luò)通信系統(tǒng)設(shè)計與實現(xiàn) 22次下載
- 淺析基于數(shù)據(jù)加密的網(wǎng)絡(luò)通信系統(tǒng)的設(shè)計與應(yīng)用 16次下載
- TD-SCDMA網(wǎng)絡(luò)通信 14次下載
- 使用JAVA編寫網(wǎng)絡(luò)通信程序 15次下載
- 內(nèi)存對齊對網(wǎng)絡(luò)通信程序的影響 12次下載
- 網(wǎng)絡(luò)通信過程 14次下載
- 網(wǎng)絡(luò)通信過程研究 7次下載
- 網(wǎng)絡(luò)通信過程中的故障排除 11次下載
- 網(wǎng)絡(luò)通信技術(shù)對教育影響 9次下載
- 網(wǎng)絡(luò)通信平臺的內(nèi)存使用 17次下載
- 網(wǎng)絡(luò)通信系統(tǒng)的控制技術(shù) 11次下載
- 工業(yè)網(wǎng)絡(luò)通信技術(shù) 22次下載
- 網(wǎng)絡(luò)通信模型 9次下載
- 嵌入式系統(tǒng)中網(wǎng)絡(luò)通信模塊的實現(xiàn)
- 最新網(wǎng)絡(luò)通信協(xié)議手冊
- socket 網(wǎng)絡(luò)通信協(xié)議解析 818次閱讀
- 澎峰科技高性能大模型推理引擎PerfXLM解析 522次閱讀
- YXC可編程晶振,頻點156.25MHZ,3225封裝,適用與AI網(wǎng)絡(luò)通信設(shè)備 440次閱讀
- 談?wù)?b class="flag-6" style="color: red">協(xié)程的那些事兒 1137次閱讀
- 詳解Linux線程、線程與異步編程、協(xié)程與異步 1014次閱讀
- 基于NVIDIA QM8700/8790交換機與HDR網(wǎng)卡的InfiniBand高性能網(wǎng)絡(luò)解決方案 3910次閱讀
- 使用channel控制協(xié)程數(shù)量 1160次閱讀
- 計算機網(wǎng)絡(luò)通信技術(shù)的原理與通信方式分析 5004次閱讀
- 高性能雙CPU單板計算機的硬件框圖及功能分析 5816次閱讀
- OPPO推出的無網(wǎng)絡(luò)通信技術(shù)是怎樣實現(xiàn)的有什么樣的作用 1.1w次閱讀
- 基于RGMII接口的88E1512搭建網(wǎng)絡(luò)通信系統(tǒng) 2.2w次閱讀
- Python自動化運維之協(xié)程函數(shù)賦值過程 3751次閱讀
- Python中的多核CPU共享數(shù)據(jù)之協(xié)程詳解 6663次閱讀
- 基于FPGA協(xié)處理器的汽車信息娛樂系統(tǒng)設(shè)計 1141次閱讀
- 基于DSP的網(wǎng)絡(luò)通信程序設(shè)計 2852次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數(shù)據(jù)手冊
- 1.06 MB | 532次下載 | 免費
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費
- 3TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費
- 5元宇宙深度解析—未來的未來-風口還是泡沫
- 6.40 MB | 227次下載 | 免費
- 6迪文DGUS開發(fā)指南
- 31.67 MB | 194次下載 | 免費
- 7元宇宙底層硬件系列報告
- 13.42 MB | 182次下載 | 免費
- 8FP5207XR-G1中文應(yīng)用手冊
- 1.09 MB | 178次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33566次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關(guān)電源設(shè)計實例指南
- 未知 | 21549次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅(qū)動電路設(shè)計》 溫德爾著
- 0.00 MB | 6656次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537798次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191187次下載 | 免費
- 7十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183279次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論