為什麼 PHP 程式設計師應該學習使用 Swoole

2021-09-08 16:44:43 字數 1712 閱讀 1222

最近兩個月一直在研究 swoole,研究成果即將在6.21正式開源發布,這段時間沒有來水文章,趁著今天放假來水水吧。

在 swoole 官網的自我介紹是「面向生產環境的 php 非同步網路通訊引擎」,首先 swoole 它是乙個網路應用的開發工具,它支援 http、tcp、udp、websocket。

swoole 和我們傳統的 php 開發差別是有的,需要理解的概念也是有的。使用目前一些基於 swoole 的框架開發的話,從開發習慣上和傳統的tp、lv 框架相差不多。

那為什麼要使用 swoole?

宇潤認為有以下幾點:

目前傳統 php框架,在處理每個請求之前,都要做一遍載入框架檔案、配置的操作。這可能已經成為效能問題的一大原因,而使用 swoole 則沒有這個問題,一次載入多次使用。

如下圖所示,這是同乙個執行緒處理併發請求的場景,比如你某個介面中需要呼叫其它 api 介面或讀寫大檔案,傳統同步阻塞和協程非同步的優勢就體現了出來。

說到協程,就得先簡單說說程序和執行緒,眾所周知程序是很占用資源的,為了處理請求大量建立程序肯定是得不償失的。而多執行緒應用就比較多了,在 cpu 層面有幾個核心就會執行幾個任務,執行緒一旦建立的多了,就會有執行緒排程的損耗。

協程是在單執行緒基礎上實現的,它可以最大限度利用 cpu 資源,而不會在等待 i/o 時白白浪費。當然,協程數越多占用的記憶體也就越多,不過這個是可以接受的,相比程序和執行緒,占用的資源是相對較少的。

使用協程時,遇到讀寫檔案、請求介面等場景,會自動掛起協程,把 cpu 讓給其它協程執行任務,這樣可以提公升單執行緒的 cpu 資源利用率,減少浪費,從而提高效能。

協程**示例:

<?php 

use swoole\coroutine as co;

// 協程

$time = microtime(true);

// 建立10個協程

for($i = 0; $i < 10; ++$i));}

swoole_event_wait();

echo 'co time:', microtime(true) - $time, ' s', php_eol;

// 同步

$time = microtime(true);

// 建立10個協程

for($i = 0; $i < 10; ++$i)

echo 'sync time:', microtime(true) - $time, ' s', php_eol;

執行結果:

098

7654

321co time:1.0087130069733 s01

2345

6789

sync time:10.010055065155 s

從上面結果可以看出,協程方式執行並不是順序的,效能更高,在sleep時會把當前執行緒的任務執行權交給其他協程。

其實也沒想象中的難,看**:

詳見:

為什麼 PHP 程式設計師應該學習使用 Swoole

最近兩個月一直在研究 swoole,研究成果即將在6.21正式開源發布,這段時間沒有來水文章,趁著今天放假來水水吧。在 swoole 官網的自我介紹是 面向生產環境的 php 非同步網路通訊引擎 首先 swoole 它是乙個網路應用的開發工具,它支援 http tcp udp websocket。s...

程式設計師應該多問些為什麼

作為一名菜鳥,乙個新手,一直不敢發自己的博文。自己總是默默的潛水,看看大神的文章。真的讓自己受益匪淺,一片博文,一點內容完全能體現出乙個人技術和能力有多牛。每個人都有上進心,每個人都想讓自己變得更牛。程式設計師嗎,靠積累 靠學習,只有積累的越多,懂得就會越多,自己才能更強。今天是第一次嘗試發博文,試...

程式設計師為什麼跳槽

程式設計師頻繁跳槽似乎成了乙個不可避免的現象。很多 請來所謂的職業分析人士,人力資源管理者座談,分析 看了看,多數屬於小兒科,很少有真正從乙個程式設計師的角度和眼光去看問題的。我認為,乙個程式設計師跳槽根本的原因,主要是公司團隊問題,其次是公司企業文化問題。很多人只看到了薪金問題這個表象,事實是,薪...