最近兩個月一直在研究 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...
程式設計師應該多問些為什麼
作為一名菜鳥,乙個新手,一直不敢發自己的博文。自己總是默默的潛水,看看大神的文章。真的讓自己受益匪淺,一片博文,一點內容完全能體現出乙個人技術和能力有多牛。每個人都有上進心,每個人都想讓自己變得更牛。程式設計師嗎,靠積累 靠學習,只有積累的越多,懂得就會越多,自己才能更強。今天是第一次嘗試發博文,試...
程式設計師為什麼跳槽
程式設計師頻繁跳槽似乎成了乙個不可避免的現象。很多 請來所謂的職業分析人士,人力資源管理者座談,分析 看了看,多數屬於小兒科,很少有真正從乙個程式設計師的角度和眼光去看問題的。我認為,乙個程式設計師跳槽根本的原因,主要是公司團隊問題,其次是公司企業文化問題。很多人只看到了薪金問題這個表象,事實是,薪...