91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

夹江县| 上高县| 巨鹿县| 卫辉市| 盐亭县| 太原市| 屯昌县| 扶风县| 揭阳市| 十堰市| 无为县| 乐亭县| 林州市| 聂拉木县| 调兵山市| 正安县| 芜湖县| 和林格尔县| 柏乡县| 新密市| 大兴区| 阜康市| 乐陵市| 甘德县| 天津市| 沁源县| 泽库县| 都兰县| 阳朔县| 闻喜县| 平昌县| 三明市| 高唐县| 鞍山市| 买车| 册亨县| 遂溪县| 望江县| 上杭县| 密云县| 滨海县|