中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

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

栖霞市| 吉林省| 孙吴县| 米泉市| 蓬安县| 金堂县| 图片| 二手房| 凤凰县| 武夷山市| 大邑县| 二连浩特市| 长宁县| 抚顺市| 平舆县| 林西县| 原阳县| 临西县| 绩溪县| 中江县| 长寿区| 扶风县| 大连市| 内丘县| 临城县| 壶关县| 历史| 巫溪县| 成武县| 响水县| 佳木斯市| 凌海市| 巩留县| 荥阳市| 唐山市| 阿拉善左旗| 赤峰市| 营山县| 永济市| 孝昌县| 彰化市|