亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

swoole協程如何實現

發布時間:2020-12-22 11:44:54 來源:億速云 閱讀:155 作者:小新 欄目:編程語言

這篇文章給大家分享的是有關swoole協程如何實現的內容。小編覺得挺實用的,因此分享給大家做個參考。一起跟隨小編過來看看吧。

Swoole4為PHP語言提供了強大的CSP協程編程模式,用戶可以通過go函數創建一個協程,以達到并發執行的效果,如下面代碼所示:

<?php
//Co::sleep()是Swoole提供的API,并不會阻塞當前進程,只會阻塞協程觸發協程切換。
go(function (){
    Co::sleep(1);
    echo "a";
});
go(function (){
    Co::sleep(2);
    echo "b";
});
echo "c";
//輸出結果:cab
//程序總執行時間2秒

其實在Swoole4之前就實現了多協程編程模式,在協程創建、切換以及結束的時候,相應的操作php棧即可(創建、切換以及回收php棧)。

此時的協程實現無法完美的支持php語法,其根本原因在于沒有保存c棧信息。(vm內部或者某些擴展提供的API是通過c函數實現的,調用這些函數時如果發生協程切換,c棧該如何處理?)

Swoole4新增了c棧的管理,在協程創建、切換以及結束的同時會伴隨著c棧的創建、切換以及回收。

Swoole4協程實現方案如下圖所示:

swoole協程如何實現

其中:

·API層是提供給用戶使用的協程相關函數,比如go()函數用于創建協程;Co::yield()使得當前協程讓出CPU;Co::resume()可恢復某個協程執行;

·Swoole4協程需要同時管理c棧與php棧,Coroutine用于管理c棧,PHPCoroutine用于管理php棧;其中Coroutine(),yield(),resume()實現了c棧的創建以及換入換出;create_func(),on_yield(),on_resume()實現了php棧的創建以及換入換出;

·Swoole4在管理c棧時,用到了 boost.context庫,make_fcontext()和jump_fcontext()函數均使用匯編語言編寫,實現了c棧上下文的創建以及切換;

·Swoole4對boost.context進行了簡單封裝,即Context層,Context(),SwapIn()以及SwapOut()

對應c棧的創建以及換入換出。

感謝各位的閱讀!關于swoole協程如何實現就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

江津市| 神池县| 夏邑县| 饶平县| 崇文区| 开封县| 淅川县| 凌云县| 吐鲁番市| 太仓市| 佳木斯市| 岢岚县| 漳浦县| 新巴尔虎右旗| 新田县| 刚察县| 大足县| 珠海市| 雷山县| 江源县| 慈利县| 西藏| 建湖县| 蒲城县| 西城区| 太湖县| 泾阳县| 同德县| 定州市| 周宁县| 新乡县| 白玉县| 忻城县| 鱼台县| 卓尼县| 安龙县| 曲靖市| 高州市| 邵阳县| 永安市| 开原市|