国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

基于swoole的swoolefy實(shí)現(xiàn)類似go的waitGroup多并發(fā)協(xié)程調(diào)度

ZweiZhao / 1407人閱讀

摘要:基于實(shí)用,抽象事件處理類,實(shí)現(xiàn)與底層的回調(diào)的解耦,支持協(xié)程調(diào)度,同步異步調(diào)用,全局事件注冊(cè),心跳檢查,異步任務(wù),多進(jìn)程池等,內(nèi)置等常用組件等。

swoolefy是一個(gè)基于swoole實(shí)現(xiàn)的輕量級(jí)高性能的常駐內(nèi)存型的API和Web應(yīng)用服務(wù)框架, 高度封裝了http,websocket,udp服務(wù)器,以及基于tcp實(shí)現(xiàn)可擴(kuò)展的rpc服務(wù), 同時(shí)支持composer包方式安裝部署項(xiàng)目。基于實(shí)用,swoolefy抽象Event事件處理類, 實(shí)現(xiàn)與底層的回調(diào)的解耦,支持協(xié)程調(diào)度,同步|異步調(diào)用,全局事件注冊(cè),心跳檢查,異步任務(wù),多進(jìn)程(池)等, 內(nèi)置view、log、session、mysql、redis、mongodb等常用組件等。

目前swoolefy4.2+版本完全支持swoole4.2.13+的協(xié)程,推薦使用swoole4.3+

GitHub:https://github.com/bingcool/s...

下面主要講解一下如何實(shí)現(xiàn)了類似go的waitGroup的功能
1、定義GoWaitGroup的類:


+----------------------------------------------------------------------
 */

namespace SwoolefyCore;

use SwooleCoroutineChannel;

class GoWaitGroup {
    /**
     * @var int
     */
    private $count = 0;

    /**
     * @var Channel
     */
    private $chan;

    /**
     * @var array
     */
    private $result = [];

    /**
     * WaitGroup constructor
     */
    public function __construct() {
        $this->chan = new Channel;
    }

    /**
     * add
     */
    public function go(Closure $go_func = null) {
        $this->count++;
        if($go_func instanceof Closure) {
            go($go_func);
        }
    }

    /**
     * start
     */
    public function start() {
        $this->count++;
        return $this->count;
    }

    /**
     * done
     */
    public function done(string $key, $data = null) {
        if(!empty($data)) {
            $this->result[$key] = $data;
        }
        $this->chan->push(1);
    }

    /**
     * wait
     */
    public function wait() {
        while($this->count--) {
            $this->chan->pop();
        }
        $result = $this->result;
        $this->result = [];
        $this->count = 0;
        return $result;
    }

}

2、在swoolefy中調(diào)用

class GroupController extends BController {
    public function waitgroup() {
        // 創(chuàng)建一個(gè)waitGroup實(shí)例
        $wg = new SwoolefyCoreGoWaitGroup();
         
         // 第一種方式,直接$wg->go()函數(shù)中執(zhí)行g(shù)o的協(xié)程函數(shù)
        $wg->go(function() use ($wg) {
            // 掛起協(xié)程
            $fp = stream_socket_client("tcp://www.baidu.com:80", $errno, $errstr, 30);
            // 協(xié)程返回的數(shù)據(jù)
            $wg->done("mysql", "mysql");
        });

        $wg->go(function() use ($wg) {
            sleep(1);
            $wg->done("tengxun", "weixin and qq");
        });

        //掛起當(dāng)前協(xié)程,等待所有任務(wù)完成后恢復(fù)
        //$result = $wg->wait();
        //這里 $result 包含了 1 個(gè)任務(wù)執(zhí)行結(jié)果
        //var_dump($result);
        
        //第二種方式,添加$wg->start(),啟動(dòng)協(xié)程,然后使用swoole的原生go執(zhí)行協(xié)程函數(shù)
        $wg->start();
        go(function () use ($wg) {
            // 掛起協(xié)程
            sleep(1);
            $wg->done("taobao", "ali baba");
        });
        
         //第二種方式,添加$wg->start(),啟動(dòng)協(xié)程,然后使用swoole的原生go執(zhí)行協(xié)程函數(shù)
        $wg->start();
        go(function () use ($wg) {
            // 掛起協(xié)程
            sleep(1);
            $wg->done("baidu", "baidu");
        });
        // 以上三個(gè)協(xié)程將會(huì)并發(fā)調(diào)用,wait()函數(shù)實(shí)現(xiàn)等待三個(gè)協(xié)程數(shù)據(jù)返回
        //掛起當(dāng)前協(xié)程,讓出cpu控制權(quán),cpu可以做其他的事情,直到待所有任務(wù)完成后恢復(fù)
        $result = $wg->wait();
        //這里 $result 包含了 2 個(gè)任務(wù)執(zhí)行結(jié)果
        var_dump($result);
    }
}

至此一個(gè)最簡(jiǎn)單的并發(fā)調(diào)用就完成了,你可以愉快使用gowaitGroup的協(xié)程調(diào)用了

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/31360.html

相關(guān)文章

  • Easyswoole 源碼學(xué)習(xí)和個(gè)人解析 目錄

    摘要:易用穩(wěn)定,本次想通過(guò)對(duì)的學(xué)習(xí)和個(gè)人解析,吸收框架的思想和設(shè)計(jì)知識(shí),加強(qiáng)自己對(duì)的認(rèn)知和理解。當(dāng)然,筆者能力水平有限,后續(xù)的文章如有錯(cuò)誤,還請(qǐng)指出和諒解。目錄如下后續(xù)添加文章都會(huì)記錄在此服務(wù)啟動(dòng)過(guò)程以及主體設(shè)計(jì)流程源碼解析 前言 swoole是什么?官網(wǎng)的原話介紹是這樣的: Swoole 使用純 C 語(yǔ)言編寫,提供了 PHP 語(yǔ)言的異步多線程服務(wù)器,異步 TCP/UDP 網(wǎng)絡(luò)客戶端,異步 ...

    CoXie 評(píng)論0 收藏0
  • PHP 協(xié)程Go + Chan + Defer

    摘要:為語(yǔ)言提供了強(qiáng)大的協(xié)程編程模式。提供的協(xié)程語(yǔ)法借鑒自,在此向開發(fā)組致敬協(xié)程可以與很好地互補(bǔ)。并發(fā)執(zhí)行使用創(chuàng)建協(xié)程,可以讓和兩個(gè)函數(shù)變成并發(fā)執(zhí)行。協(xié)程需要拿到請(qǐng)求的結(jié)果。 Swoole4為PHP語(yǔ)言提供了強(qiáng)大的CSP協(xié)程編程模式。底層提供了3個(gè)關(guān)鍵詞,可以方便地實(shí)現(xiàn)各類功能。 Swoole4提供的PHP協(xié)程語(yǔ)法借鑒自Golang,在此向GO開發(fā)組致敬 PHP+Swoole協(xié)程可以與...

    nidaye 評(píng)論0 收藏0
  • swoolefy-基于swoole擴(kuò)展實(shí)現(xiàn)高性能常駐內(nèi)存型API和Web應(yīng)用服務(wù)框架

    摘要:是一個(gè)基于擴(kuò)展實(shí)現(xiàn)的輕量級(jí)高性能的常駐內(nèi)存型的和應(yīng)用服務(wù)框架高度封裝了,,服務(wù)器,以及基于實(shí)現(xiàn)可擴(kuò)展的服務(wù),同時(shí)支持包方式安裝部署項(xiàng)目。基于實(shí)用,抽象事件處理類,實(shí)現(xiàn)與底層的回調(diào)的解耦,支持同步異步調(diào)用,內(nèi)置等常用組件等。 swoolefy swoolefy是一個(gè)基于swoole擴(kuò)展實(shí)現(xiàn)的輕量級(jí)高性能的常駐內(nèi)存型的API和Web應(yīng)用服務(wù)框架,高度封裝了http,websocket,ud...

    lewinlee 評(píng)論0 收藏0
  • PHP下用Swoole實(shí)現(xiàn)Actor并發(fā)模型

    摘要:協(xié)程與信箱得益于,我們可以基于的協(xié)程與快速實(shí)現(xiàn)一個(gè)信箱模式調(diào)度。樣例代碼比如在一個(gè)聊天室中,我們可以定義一個(gè)房間模型。 什么是Actor? Actor對(duì)于PHPer來(lái)說(shuō),可能會(huì)比較陌生,寫過(guò)Java的同學(xué)會(huì)比較熟悉,Java一直都有線程的概念(雖然PHP有Pthread,但不普及),它是一種非共享內(nèi)存的并發(fā)模型,每個(gè)Actor內(nèi)的數(shù)據(jù)獨(dú)立存在,Actor之間通過(guò)消息傳遞的形式進(jìn)行交互調(diào)...

    GeekQiaQia 評(píng)論0 收藏0
  • 聊聊 2018 年后端技術(shù)趨勢(shì)

    摘要:現(xiàn)在在后端業(yè)務(wù)開發(fā)編程方面,技術(shù)力量強(qiáng)的團(tuán)隊(duì)已經(jīng)開始將技術(shù)棧從同步模式切換為異步了。使用這些技術(shù)方案是無(wú)法兼容已有程序的。影響了異步回調(diào)技術(shù)棧的普及。將會(huì)成為未來(lái)后端開發(fā)領(lǐng)域的主流技術(shù)方案。 今天太忙,少寫一點(diǎn),后面再補(bǔ)充。 異步模式 Go 語(yǔ)言越來(lái)越熱門,很多大型互聯(lián)網(wǎng)公司后端正在轉(zhuǎn)向 GO 。Java 圈知名的服務(wù)化框架 Dubbo 也宣布轉(zhuǎn)型異步模式。這是一個(gè)大趨勢(shì),異步模式已經(jīng)...

    Miyang 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<