電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>電子資料>Swow高性能純協(xié)程網(wǎng)絡(luò)通信引擎

Swow高性能純協(xié)程網(wǎng)絡(luò)通信引擎

2022-06-17 | zip | 1.14 MB | 次下載 | 免費(fèi)

資料介紹

授權(quán)協(xié)議 Apache-2.0
開(kāi)發(fā)語(yǔ)言 C/C++ PHP
操作系統(tǒng) 跨平臺(tái)
軟件類型 開(kāi)源軟件
所屬分類 程序開(kāi)發(fā)、 網(wǎng)絡(luò)工具包

軟件簡(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)的各種好處就不言而喻了。

?

下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評(píng)論

查看更多

下載排行

本周

  1. 1山景DSP芯片AP8248A2數(shù)據(jù)手冊(cè)
  2. 1.06 MB  |  532次下載  |  免費(fèi)
  3. 2RK3399完整板原理圖(支持平板,盒子VR)
  4. 3.28 MB  |  339次下載  |  免費(fèi)
  5. 3TC358743XBG評(píng)估板參考手冊(cè)
  6. 1.36 MB  |  330次下載  |  免費(fèi)
  7. 4DFM軟件使用教程
  8. 0.84 MB  |  295次下載  |  免費(fèi)
  9. 5元宇宙深度解析—未來(lái)的未來(lái)-風(fēng)口還是泡沫
  10. 6.40 MB  |  227次下載  |  免費(fèi)
  11. 6迪文DGUS開(kāi)發(fā)指南
  12. 31.67 MB  |  194次下載  |  免費(fèi)
  13. 7元宇宙底層硬件系列報(bào)告
  14. 13.42 MB  |  182次下載  |  免費(fèi)
  15. 8FP5207XR-G1中文應(yīng)用手冊(cè)
  16. 1.09 MB  |  178次下載  |  免費(fèi)

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費(fèi)
  3. 2555集成電路應(yīng)用800例(新編版)
  4. 0.00 MB  |  33566次下載  |  免費(fèi)
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費(fèi)
  7. 4開(kāi)關(guān)電源設(shè)計(jì)實(shí)例指南
  8. 未知  |  21549次下載  |  免費(fèi)
  9. 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書(shū))
  10. 0.00 MB  |  15349次下載  |  免費(fèi)
  11. 6數(shù)字電路基礎(chǔ)pdf(下載)
  12. 未知  |  13750次下載  |  免費(fèi)
  13. 7電子制作實(shí)例集錦 下載
  14. 未知  |  8113次下載  |  免費(fèi)
  15. 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德?tīng)栔?/a>
  16. 0.00 MB  |  6656次下載  |  免費(fèi)

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費(fèi)
  3. 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
  4. 78.1 MB  |  537798次下載  |  免費(fèi)
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費(fèi)
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費(fèi)
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費(fèi)
  11. 6電路仿真軟件multisim 10.0免費(fèi)下載
  12. 340992  |  191187次下載  |  免費(fèi)
  13. 7十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
  14. 158M  |  183279次下載  |  免費(fèi)
  15. 8proe5.0野火版下載(中文版免費(fèi)下載)
  16. 未知  |  138040次下載  |  免費(fèi)