Swoole4.5為PHP語言提供了強大的CSP協程編程模式。底層提供了3個關鍵詞,可以方便地實現各類功能。
本文基於Swoole-4.2.9和PHP-7.2.9版本
這3個功能底層實現全部為內存操作,沒有任何IO資源消耗。就像PHP的Array一樣是非常廉價的。如果有需要就可以直接使用。這與socket和file操作不同,後者需要向作業系統申請埠和文件描述符,讀寫可能會產生阻塞的IO等待。
使用go函數可以讓一個函數並發地去執行。在編程過程中,如果某一段邏輯可以並發執行,就可以將它放置到go協程中執行。
<?phpfunction test1() { sleep(1); echo &34;;}function test2() { sleep(2); echo &34;;}test1();test2();
htf@LAPTOP-0K15EFQI:~$ time php b1.phpbcreal 0m3.080suser 0m0.016ssys 0m0.063shtf@LAPTOP-0K15EFQI:~$
上述代碼中,test1和test2會順序執行,需要3秒才能執行完成。
使用go創建協程,可以讓test1和test2兩個函數變成並發執行。
<?phpSwoole\Runtime::enableCoroutine();go(function () { sleep(1); echo &34;;});go(function () { sleep(2); echo &34;;});
Swoole\Runtime::enableCoroutine()作用是將PHP提供的stream、sleep、pdo、mysqli、redis等功能從同步阻塞切換為協程的異步IO
bchtf@LAPTOP-0K15EFQI:~$ time php co.phpbcreal 0m2.076suser 0m0.000ssys 0m0.078shtf@LAPTOP-0K15EFQI:~$
可以看到這裡只用了2秒就執行完成了。
有了go關鍵詞之後,並發編程就簡單多了。與此同時又帶來了新問題,如果有2個協程並發執行,另外一個協程,需要依賴這兩個協程的執行結果,如果解決此問題呢?
答案就是使用通道(Channel),在Swoole4協程中使用new chan就可以創建一個通道。通道可以理解為自帶協程調度的隊列。它有兩個接口push和pop:
使用通道可以很方便地實現並發管理。
<?php$chan = new chan(2); 協程2go(function () use ($chan) { $cli = new Swoole\Coroutine\Http\Client(&39;, 80); $cli->set([&39; => 10]); $cli->setHeaders([ &39; => &34;, &34; => &39;, &39; => &39;, &39; => &39;, ]); $ret = $cli->get(&39;); // $cli->body 響應內容過大,這裡用 Http 狀態碼作為測試 $chan->push([&39; => $cli->statusCode]);});39;www.163.com&39;timeout&39;Host&34;www.163.com&34;User-Agent&39;Chrome/49.0.2587.3&39;Accept&39;text/html,application/xhtml+xml,application/xml&39;Accept-Encoding&39;gzip&39;/&39;www.163.com&34;www.qq.com&34;www.163.com&34;a&34;~a&34;b&34;~b&34;c";});
htf@LAPTOP-0K15EFQI:~/swoole-src/examples/5.0$ time php defer.phpabc~b~areal 0m1.068suser 0m0.016ssys 0m0.047shtf@LAPTOP-0K15EFQI:~/swoole-src/examples/5.0$
Swoole4提供的Go + Chan + Defer為PHP帶來了一種全新的CSP並發編程模式。靈活使用Swoole4提供的各項特性,可以解決工作中各類複雜功能的設計和開發。
在「疫情」期間已經淘汰了一批末端的業務coder,現在是自己努力成為資深程式設計師的好時機,才能在面對高薪職位邀請時,做到胸有成竹。為了大家能夠順利進階PHP中高級程式設計師、架構師,我為大家準備了一份中高級的教程福利!
作為web開發的佼佼者PHP並不遜色其他語言,加上swoole後更加是如虎添翼!進軍通信 、物聯網行業開發百度地圖、百度訂單中心等!年後更是霸佔程式設計師招聘語言第二名,寒冬裁員期過後正是各大企業擴大招人的時期,現在市場初級程式設計師泛濫,進階中高級程式設計師絕對是各大企業急需的人才,這套教程適合那些1-6年的PHP開發者進階中高級提升自己,在春招中找到高薪職位!
部分資料展示: