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

溫馨提示×

溫馨提示×

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

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

swoole協程和異步區別是什么

發布時間:2021-01-18 14:38:52 來源:億速云 閱讀:484 作者:小新 欄目:編程語言

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

從4.0版本開始Swoole提供了完整的協程(Coroutine)+ 通道(Channel)特性,帶來全新的CSP編程模型。

應用層可使用完全同步的編程方式,底層自動實現異步IO。

go(function () {
    $redis = new Swoole\Coroutine\Redis();
    $redis->connect('127.0.0.1', 6379);
    $val = $redis->get('key');
});

4.0.0或更高版本僅支持PHP7

4.0.1版本開始去除了--enable-coroutine編譯選項,改為動態配置

協程可以理解為純用戶態的線程,其通過協作而不是搶占來進行切換。相對于進程或者線程,協程所有的操作都可以在用戶態完成,創建和切換的消耗更低。

Swoole可以為每一個請求創建對應的協程,根據IO的狀態來合理的調度協程,這會帶來了以下優勢:

開發者可以無感知的用同步的代碼編寫方式達到異步IO的效果和性能,避免了傳統異步回調所帶來的離散的代碼邏輯和陷入多層回調中導致代碼無法維護

同時由于底層封裝了協程,所以對比傳統的PHP層協程框架,開發者不需要使用yield關鍵詞來標識一個協程IO操作,所以不再需要對yield的語義進行深入理解以及對每一級的調用都修改為yield,這極大的提高了開發效率

可以滿足大部分開發者的需求。對于私有協議,開發者可以使用協程的TCP或者UDP接口去方便的封裝。

在Server程序中如果需要執行很耗時的操作,比如一個聊天服務器發送廣播,Web服務器中發送郵件。如果直接去執行這些函數就會阻塞當前進程,導致服務器響應變慢。

Swoole提供了異步任務處理的功能,可以投遞一個異步任務到TaskWorker進程池中執行,不影響當前請求的處理速度。

程序代碼

基于第一個TCP服務器,只需要增加onTask和onFinish3個事件回調函數即可。另外需要設置task進程數量,可以根據任務的耗時和任務量配置適量的task進程。

$serv = new swoole_server("127.0.0.1", 9501);

//設置異步任務的工作進程數量
$serv->set(array('task_worker_num' => 4));

$serv->on('receive', function($serv, $fd, $from_id, $data) {
    //投遞異步任務
    $task_id = $serv->task($data);
    echo "Dispath AsyncTask: id=$task_id\n";
});

//處理異步任務
$serv->on('task', function ($serv, $task_id, $from_id, $data) {
    echo "New AsyncTask[id=$task_id]".PHP_EOL;
    //返回任務執行的結果
    $serv->finish("$data -> OK");
});

//處理異步任務的結果
$serv->on('finish', function ($serv, $task_id, $data) {
    echo "AsyncTask[$task_id] Finish: $data".PHP_EOL;
});

$serv->start();

調用$serv->task()后,程序立即返回,繼續向下執行代碼。onTask回調函數Task進程池內被異步執行。執行完成后調用$serv->finish()返回結果。

感謝各位的閱讀!關于“swoole協程和異步區別是什么”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

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

AI

宝丰县| 宜州市| 中山市| 胶南市| 黄冈市| 工布江达县| 乡宁县| 津市市| 称多县| 汉中市| 江川县| 阜南县| 卢湾区| 阳泉市| 拉孜县| 嘉定区| 马山县| 噶尔县| 喀喇沁旗| 芦山县| 阳原县| 襄城县| 青海省| 和林格尔县| 六盘水市| 游戏| 苍南县| 绥江县| 岚皋县| 磐石市| 微博| 杭锦旗| 满城县| 江达县| 米易县| 菏泽市| 凌海市| 祥云县| 余江县| 深水埗区| 洪湖市|