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