AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當前位置:首頁 > 科技  > 軟件

讓我們認識一下PHP非阻塞并發框架Amp

來源: 責編: 時間:2024-05-27 17:24:55 146觀看
導讀什么是異步編程?當使用PHP編寫的應用程序I/O任務時,程序會在執行某個任務之前,一定要等待之前的任務完成,這時CPU會有很多時間處于空閑狀態,這不僅會降低應用程序性能,還會降低硬件利用率。比如,當程序需要從數據庫中讀取大

什么是異步編程?

當使用PHP編寫的應用程序I/O任務時,程序會在執行某個任務之前,一定要等待之前的任務完成,這時CPU會有很多時間處于空閑狀態,這不僅會降低應用程序性能,還會降低硬件利用率。比如,當程序需要從數據庫中讀取大量的數據時,由于需要等待I/O操作完成,程序的執行速度會非常緩慢。uRQ28資訊網——每日最新資訊28at.com

因此,我們通過事件庫,在程序執行的過程中,不需要等待某個任務完成才能執行下一個任務。這種編程模式可以極大地提高程序的效率和響應速度,尤其在處理復雜的I/O操作時表現得更為出色,而這就是異步編程。uRQ28資訊網——每日最新資訊28at.com

Amphp

Amphp/Amp 是一個輕量級、高效的PHP異步庫,為開發人員提供了一種處理I/O密集型任務和網絡操作的新方式。它基于coroutine(協程)模型,讓你能夠編寫出并發執行的任務,從而最大化服務器資源利用率,提高應用性能。uRQ28資訊網——每日最新資訊28at.com

核心技術

Amp的核心是它的事件循環和coroutine(協程)支持。事件循環監聽系統級別的事件,如文件描述符的狀態變化或定時器觸發,而coroutine則允許代碼在不阻塞主線程的情況下進行暫停和恢復。這種設計使得開發者可以以同步代碼的風格編寫異步程序,降低了異步編程的學習曲線。uRQ28資訊網——每日最新資訊28at.com

此外,Amp還提供了Promise/Try機制,這是一套處理異步操作成功與失敗的工具。通過Promise對象,你可以輕松地鏈式處理異步操作,并優雅地處理錯誤。uRQ28資訊網——每日最新資訊28at.com

應用場景

  • 網絡I/O: Amp非常適合處理大量HTTP請求、TCP連接或其他網絡通信,如:Websocket。它可以并行處理這些連接,顯著提升Web服務的吞吐量。
  • 數據庫交互: 異步數據庫操作可以大大提高數據讀取和寫入的速度,尤其是在需要處理多個查詢時。
  • 文件系統操作: 讀寫大文件或者遍歷大量目錄時,Amp可以通過異步操作避免阻塞主線程。
  • 后臺任務: 對于耗時較長的后臺任務,如數據處理、爬蟲或批量更新,Amp可以實現更快的執行速度。

AMPHP是一個事件驅動的PHP庫集合,設計時考慮了纖程和并發性。amphp/amp專門提供了future和cancellation作為異步編程的基本原語。我們現在使用Revolt,而不是使用amphp/amp發布事件循環實現。uRQ28資訊網——每日最新資訊28at.com

PHP大量使用PHP 8.1附帶的纖程來編寫異步代碼,就像同步、阻塞代碼一樣。與早期版本相比,不需要基于生成器的協程或回調。與線程類似,每個纖程都有自己的調用堆棧,但纖程由事件循環協同調度。使用Amp/async()并發運行。uRQ28資訊網——每日最新資訊28at.com

動機

傳統上,PHP遵循順序執行模型。PHP引擎按順序一行接一行地執行。然而,程序通常由多個獨立的子程序組成,這些子程序可以同時執行。uRQ28資訊網——每日最新資訊28at.com

如果查詢數據庫,則以阻塞方式發送查詢并等待數據庫服務器的響應。一旦你有了答案,你就可以開始做下一件事。我們可以發送下一個數據庫查詢,或者對一個API執行HTTP調用,而不是坐在那里什么也不做。讓我們利用我們通常花在等待I/O上的時間!uRQ28資訊網——每日最新資訊28at.com

Revolt允許這樣的并發I/O操作。我們通過避免回調來保持低認知負荷。我們的API可以像任何其他庫一樣使用,除了它們也可以并發工作,因為我們在后臺使用了非阻塞I/O。使用Amp/async()并發運行,并在需要時使用Future::await()等。uRQ28資訊網——每日最新資訊28at.com

多年來,在PHP中實現并發的技術有很多,例如PHP 5中的回調和生成器。這些方法都有“你的函數是什么顏色”的問題,我們通過PHP 8.1中的Fibers解決了這個問題。它們允許多個獨立調用堆棧的并發性。uRQ28資訊網——每日最新資訊28at.com

纖程由事件循環協同調度,這就是為什么它們也被稱為協程。重要的是要理解,在任何給定的時間只有一個協程在運行,所有其他協程在此期間暫停。uRQ28資訊網——每日最新資訊28at.com

你可以將協程比作一臺使用單個CPU內核運行多個程序的計算機。每個程序都有一個執行時間段。然而,協程并不是搶占式的。他們沒有固定的時間。他們必須主動給予事件循環的控制權。uRQ28資訊網——每日最新資訊28at.com

任何阻塞I/O函數在等待I/O時阻塞整個進程。你會想要避開他們。如果你還沒有閱讀安裝指南,可以看看Hello World示例,它演示了阻塞函數的效果。AMPHP提供的庫避免了I/O阻塞。uRQ28資訊網——每日最新資訊28at.com

安裝

此包可以作為Composer依賴項安裝。uRQ28資訊網——每日最新資訊28at.com

composer require amphp/amp

如果您使用這個庫,很可能希望使用Revolt來調度事件,您應該單獨要求Revolt,即使它是作為依賴項自動安裝的。uRQ28資訊網——每日最新資訊28at.com

composer require revolt/event-loop

這些包為PHP中的異步/并發應用程序提供了基本的構建塊。我們提供了很多建立在這些基礎上的軟件包。uRQ28資訊網——每日最新資訊28at.com

例如以下uRQ28資訊網——每日最新資訊28at.com

  • amphp/byte-stream提供流抽象
  • amphp/socket為UDP和TCP(包括TLS)提供套
  • amphp/parallel提供并行處理以利用多個CPU內核并卸載阻塞操作
  • amphp/http-client提供HTTP/1.1和HTTP/2客戶端
  • amphp/http-server提供HTTP/1.1和HTTP/2應用服務器
  • amphp/mysql和amphp/postgres用于非阻塞數據庫訪問

要求

此軟件包需要PHP 8.1或更高版本。無需擴展!僅當應用需要大量并發套接字連接時才需要擴展,通常此限制配置為最多1024個文件描述符。uRQ28資訊網——每日最新資訊28at.com

使用

協程

協同程序是可中斷的功能。在PHP中,它們可以使用纖程來實現。uRQ28資訊網——每日最新資訊28at.com

以前版本的JavaScript使用生成器來實現類似的目的,但是纖程可以在調用堆棧中的任何地方中斷,這使得以前的樣板文件(如Amp/call())變得不必要。uRQ28資訊網——每日最新資訊28at.com

在任何給定的時間,只有一個纖程在運行。當協程掛起時,協程的執行會暫時中斷,允許其他任務運行。一旦計時器到期,流操作可能,或任何等待的Future完成,執行將恢復。uRQ28資訊網——每日最新資訊28at.com

協同程序的低級掛起和恢復由Revolt的SuspensionAPI處理。uRQ28資訊網——每日最新資訊28at.com

<?phprequire __DIR__ . '/vendor/autoload.php';use Revolt/EventLoop;$suspension = EventLoop::getSuspension();EventLoop::delay(5, function () use ($suspension): void {    print '++ Executing callback created by EventLoop::delay()' . PHP_EOL;    $suspension->resume(null);});print '++ Suspending to event loop...' . PHP_EOL;$suspension->suspend();print '++ Script end' . PHP_EOL;

在Revolt事件循環上注冊的回調會自動作為協程運行,掛起它們是安全的。除了事件循環API,Amp/async()還可以用來啟動獨立的調用棧。uRQ28資訊網——每日最新資訊28at.com

<?phpuse function Amp/delay;require __DIR__ . '/vendor/autoload.php';Amp/async(function () {    print '++ Executing callback passed to async()' . PHP_EOL;    delay(3);    print '++ Finished callback passed to async()' . PHP_EOL;});print '++ Suspending to event loop...' . PHP_EOL;delay(5);print '++ Script end' . PHP_EOL;


uRQ28資訊網——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-91034-0.html讓我們認識一下PHP非阻塞并發框架Amp

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: C# 類(Class):構建面向對象程序的基礎

下一篇: 北京試點醫保外賣購 目前京東可下單 支付寶醫保支付

標簽:
  • 熱門焦點
  • Find N3入網:最高支持16+1TB

    OPPO將于近期登場的Find N3折疊屏目前已經正式入網,型號為PHN110。本次Find N3在外觀方面相比前兩代有很大的變化,不再是小號的橫向折疊屏,而是跟別的廠商一樣采用了較為常見的
  • 紅魔電競平板評測:大屏幕硬實力

    前言:三年的疫情因為要上網課的原因激活了平板市場,如今網課的時代已經過去,大家的生活都恢復到了正軌,這也就意味著,真正考驗平板電腦生存的環境來了。也就是面對著這種殘酷的
  • 8月總票房已突破10億!《封神》第一:口碑已經成了

    8月5日消息,據燈塔專業版數據,截至8月5日9時35分,8月總票房(含預售)已突破10億。其中,《封神》以大比分的優勢領先。根據官方消息,目前該片總票房已經超過14.
  • 線程通訊的三種方法!通俗易懂

    線程通信是指多個線程之間通過某種機制進行協調和交互,例如,線程等待和通知機制就是線程通訊的主要手段之一。 在 Java 中,線程等待和通知的實現手段有以下幾種方式:Object 類下
  • 之家push系統迭代之路

    前言在這個信息爆炸的互聯網時代,能夠及時準確獲取信息是當今社會要解決的關鍵問題之一。隨著之家用戶體量和內容規模的不斷增大,傳統的靠"主動拉"獲取信息的方式已不能滿足用
  • 這款新興工具平臺,讓你的電腦效率翻倍

    隨著信息技術的發展,我們獲取信息的渠道越來越多,但是處理信息的效率卻成為一個瓶頸。于是各種工具應運而生,都在爭相解決我們的工作效率問題。今天我要給大家介紹一款效率
  • 小紅書1周漲粉49W+,我總結了小白可以用的N條漲粉筆記

    作者:黃河懂運營一條性教育視頻,被54萬人&ldquo;珍藏&rdquo;是什么體驗?最近,情感博主@公主是用鮮花做的,火了!僅僅憑借一條視頻,光小紅書就有超過128萬人,為她瘋狂點贊!更瘋狂的是,這
  • 年輕人的“職場羞恥感”,無處不在

    作者:馮曉亭 陶 淘 李 欣 張 琳 馬舒葉來源:燃次元&ldquo;人在職場,應該選擇什么樣的著裝?&rdquo;近日,在網絡上,一個與著裝相關的帖子引發關注,在該帖子里,一位在高級寫字樓亞洲金
  • 余承東:AI大模型技術的發展將會帶來下一代智能終端操作系統的智慧體驗

    8月4日消息,2023年華為開發者大會(HDC.Together)今天正式開幕,華為發布HarmonyOS 4、全新升級的鴻蒙開發套件、HarmonyOS Next開發者預覽版本等一系列
Top