成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

swoole通用協(xié)程池的實(shí)現(xiàn)

wanghui / 1146人閱讀

摘要:之前過行代碼實(shí)現(xiàn)通用協(xié)程池今天看了下相關(guān)文檔,用也實(shí)現(xiàn)了一個(gè),由于沒有的,所以實(shí)現(xiàn)的有點(diǎn)簡(jiǎn)單,但是實(shí)用性還可以,通過工廠函數(shù)實(shí)現(xiàn)了通用性。官方的協(xié)程池是用只能用在。因?yàn)閰f(xié)程池代碼層耦合了實(shí)例化邏輯。

之前過golang40行代碼實(shí)現(xiàn)通用協(xié)程池

今天看了下swoole相關(guān)文檔,用PHP也實(shí)現(xiàn)了一個(gè),由于swoole沒有golangselect,所以實(shí)現(xiàn)的有點(diǎn)簡(jiǎn)單,但是實(shí)用性還可以,通過工廠函數(shù)實(shí)現(xiàn)了通用性。

swoole官方的協(xié)程池是用只能用在Redis。因?yàn)閰f(xié)程池代碼層耦合了Redis實(shí)例化邏輯。

class RedisPool
{
    /**
     * @var SwooleCoroutineChannel
     */
    protected $pool;

    /**
     * RedisPool constructor.
     * @param int $size 連接池的尺寸
     */
    function __construct($size = 100)
    {
        $this->pool = new SwooleCoroutineChannel($size);
        for ($i = 0; $i < $size; $i++)
        {
            $redis = new SwooleCoroutineRedis();
            $res = $redis->connect("127.0.0.1", 6379);
            if ($res == false)
            {
                throw new RuntimeException("failed to connect redis server.");
            }
            else
            {
                $this->put($redis);
            }
        }
    }

    function put($redis)
    {
        $this->pool->push($redis);
    }

    function get()
    {
        return $this->pool->pop();
    }
}

利用工廠方法的改造如下:

size = $size;
        $this->factory = $factory;
        $this->init();
    }


    /**
     * check pool config
     * @throws InvalidParamException
     */
    private function init()
    {
        if ($this->size <= 0) {
            throw new InvalidParamException("The "size" property must be greater than zero.");
        }
        if (empty($this->factory)) {
            throw new InvalidParamException("The "factory" property must be set.");
        }
        if (!is_callable($this->factory)) {
            throw new InvalidParamException("The "factory" property must be callable.");
        }
        $this->bootstrap();
    }

    /**
     * bootstrap pool
     */
    private function bootstrap()
    {
        $this->channel = new Channel($this->size);

        for ($i = 0; $i < $this->size; $i++) {
            $this->channel->push(call_user_func($this->factory));
        }
    }

    /**
     * Acquire a connection
     * @param int $timeout
     * @return mixed
     */
    public function acquire($timeout = 0)
    {
        return $this->channel->pop($timeout);
    }

    /**
     * Release a resource
     * @param mixed $resource
     */
    public function release($resource)
    {
        $this->channel->push($resource);
    }
}

我們代碼里面不關(guān)心創(chuàng)建連接的具體邏輯,只要調(diào)用工廠方法即可。

項(xiàng)目地址

項(xiàng)目已經(jīng)開源到githubhttps://github.com/swoole-foundation/swoole-pool

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/31517.html

相關(guān)文章

  • Mix PHP V2 實(shí)例:AliCloud 短信協(xié)程池異步發(fā)送守護(hù)程序

    摘要:前些時(shí)間我們發(fā)布了實(shí)例協(xié)程池異步郵件發(fā)送守護(hù)程序范例,這一次我們提供一個(gè)使用大廠通過協(xié)程化來(lái)并行執(zhí)行短信發(fā)送任務(wù),本文是一個(gè)代碼簡(jiǎn)單性能極強(qiáng)的范例。 前些時(shí)間我們發(fā)布了 Mix PHP V2 實(shí)例:協(xié)程池異步郵件發(fā)送守護(hù)程序 范例,這一次我們提供一個(gè)使用大廠 SDK 通過 Swoole Hook 協(xié)程化來(lái)并行執(zhí)行短信發(fā)送任務(wù),本文是一個(gè)代碼簡(jiǎn)單、IO 性能極強(qiáng)的范例。 請(qǐng)先升級(jí)到 m...

    qc1iu 評(píng)論0 收藏0
  • Mix PHP V2 實(shí)例:協(xié)程池異步郵件發(fā)送守護(hù)程序

    摘要:消費(fèi)者開發(fā)使用本例時(shí),請(qǐng)確保你使用的編譯時(shí)開啟了本例我們采用的守護(hù)程序協(xié)程池來(lái)完成一個(gè)超高性能的郵件發(fā)送程序。 去年 Mix PHP V1 發(fā)布時(shí),我寫了一個(gè)多進(jìn)程的郵件發(fā)送實(shí)例: 使用 mixphp 打造多進(jìn)程異步郵件發(fā)送,今年 Mix PHP V2 發(fā)布,全面的協(xié)程支持讓我們可以使用一個(gè)進(jìn)程就可達(dá)到之前多個(gè)進(jìn)程都無(wú)法達(dá)到的更高 IO 性能,所以今天重寫一個(gè)協(xié)程池版本的郵件發(fā)送實(shí)例。...

    lauren_liuling 評(píng)論0 收藏0
  • Mix PHP V2 新特性:協(xié)程、定時(shí)器

    摘要:主函數(shù)查詢數(shù)據(jù)不手動(dòng)釋放的連接不會(huì)歸還連接池,會(huì)在析構(gòu)時(shí)丟棄執(zhí)行結(jié)果為,說明是并行執(zhí)行的。主函數(shù)查詢數(shù)據(jù)即便拋出了異常,仍然能執(zhí)行到,沒有導(dǎo)致內(nèi)的一直處于阻塞狀態(tài)。主函數(shù)一次性定時(shí)持續(xù)定時(shí)停止定時(shí) 協(xié)程 Mix PHP V2 基于 Swoole 4 的 PHP Stream Hook 協(xié)程技術(shù)開發(fā),協(xié)程使用方式與 Golang 幾乎一致,包括框架封裝的協(xié)程池、連接池、命令行處理都大量參...

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

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

0條評(píng)論

wanghui

|高級(jí)講師

TA的文章

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