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