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

資訊專欄INFORMATION COLUMN

PHP異步編程,異步的本質(zhì)

lushan / 2299人閱讀

摘要:實現(xiàn)異步的方式有哪些提供了一些異步方法那它們底層是用哪種方式實現(xiàn)的呢實現(xiàn)異步的方式有線程方式進程方式復(fù)用線程方式和進程方式類似有異步請求時開一個線程或者進程獲取到數(shù)據(jù)后線程間可以直接共享數(shù)據(jù)進程間可以通過進程通信機制,如共享內(nèi)存管道等方式進

實現(xiàn)異步的方式有哪些? swoole提供了一些異步方法, 那它們底層是用哪種方式實現(xiàn)的呢?

實現(xiàn)異步的方式有:

線程方式

進程方式

IO復(fù)用

線程方式和進程方式類似, 有異步請求時, 開一個線程或者進程, 獲取到數(shù)據(jù)后, 線程間可以直接共享數(shù)據(jù). 進程間可以通過進程通信機制,如共享內(nèi)存,管道等方式進行數(shù)據(jù)傳送. 思路很簡單, 可以參考這篇利用swoole_process和eventloop實現(xiàn)php異步編程, 但是缺點非常明顯, 開銷太大, 一個異步請求,就要開一個線程或者進程.

IO復(fù)用方式, 通常有select,poll, epoll這幾種方式, 當(dāng)下最流行的當(dāng)然是epoll, 性能好, 理論上來說沒有連接限制, 單個進程內(nèi)可以維持數(shù)十萬的連接. 使用這種方式,當(dāng)有異步請求時,可以在當(dāng)前進程內(nèi),再開一個連接做異步請求,開銷很少, 性能很好, 主流的異步實現(xiàn)都是這種方式.

swoole提供了一些異步http client, mysql client, 可以讓你異步地訪問http servermysql server, 通過回調(diào)的方式對返回的數(shù)據(jù)進行處理, 它們使用的方式就是IO復(fù)用.

來看一段swoole的源代碼:

異步tcp請求

static int swClient_tcp_connect_async(swClient *cli, char *host, int port, double timeout, int nonblock)
{
    int ret;
    cli->timeout = timeout;

    //alloc input memory buffer
    cli->buffer = swString_new(cli->buffer_input_size);
    if (!cli->buffer)
    {
        return SW_ERR;
    }

    if (!(cli->onConnect && cli->onError && cli->onClose))
    {
        swWarn("onConnect/onError/onClose callback have not set.");
        return SW_ERR;
    }

    if (swClient_inet_addr(cli, host, port) < 0)
    {
        return SW_ERR;
    }

    while (1)
    {
        ret = connect(cli->socket->fd, (struct sockaddr *) &cli->server_addr.addr, cli->server_addr.len);
        if (ret < 0)
        {
            if (errno == EINTR)
            {
                continue;
            }
            SwooleG.error = errno;
        }
        break;
    }

    if ((ret < 0 && errno == EINPROGRESS) || ret == 0)
    {
        if (SwooleG.main_reactor->add(SwooleG.main_reactor, cli->socket->fd, cli->reactor_fdtype | SW_EVENT_WRITE) < 0)
        {
            return SW_ERR;
        }
        return SW_OK;
    }

    return ret;
}

關(guān)鍵看這一段:

if (SwooleG.main_reactor->add(SwooleG.main_reactor, cli->socket->fd, cli->reactor_fdtype | SW_EVENT_WRITE) < 0)
{
    return SW_ERR;
}
return SW_OK;

就是把socket fd放到reactor中監(jiān)聽, 本質(zhì)上就是epoll, 也就是IO復(fù)用技術(shù).

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

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

相關(guān)文章

  • PHP socket初探 --- 關(guān)于IO一些枯燥理論

    摘要:原文地址要想更好了解編程,有一個不可繞過的環(huán)節(jié)就是在中,一切皆文件實際上要文件干啥不就是讀寫么所以,這句話本質(zhì)就是才是王道用的打開文件關(guān)閉文件讀讀寫寫,這叫本地文件在編程中,本質(zhì)就是網(wǎng)絡(luò)所以,在開始進一步的編程前,我們必須先從概念上認識好 [原文地址:https://blog.ti-node.com/blog...] 要想更好了解socket編程,有一個不可繞過的環(huán)節(jié)就是IO.在Lin...

    sf190404 評論0 收藏0
  • 聊聊 2018 年后端技術(shù)趨勢

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

    Miyang 評論0 收藏0
  • 徹底搞清 同步,異步,阻塞,非阻塞概念性知識

    摘要:需要先對的概念有一定的認識我們通常使用的打開文件關(guān)閉文件讀讀寫寫這叫本地文件而在編程中本質(zhì)其實是網(wǎng)絡(luò)同步異步阻塞非阻塞之前反正一直搞不清楚同步和阻塞異步和非阻塞的概念總感覺同步就是阻塞異步就是非阻塞的總是搞得暈乎乎的于是就重新查了些資料進行 IO 需要先對 IO 的概念有一定的認識: 我們通常使用php的fopen打開文件關(guān)閉文件讀讀寫寫, 這叫本地文件IO; 而在socket編程中...

    libin19890520 評論0 收藏0
  • 函數(shù)式編程與面向?qū)ο?em>編程[5]:編程本質(zhì)

    摘要:函數(shù)式編程與面向?qū)ο缶幊叹幊痰谋举|(zhì)之劍目錄編程的本質(zhì)讀到兩篇文章寫的不錯綜合摘錄一下復(fù)合是編程的本質(zhì)函數(shù)式程序員在洞察問題方面會遵循一個奇特的路線。在面向?qū)ο缶幊讨?,類或接口的聲明就是表面? 函數(shù)式編程與面向?qū)ο缶幊蘙5]:編程的本質(zhì) 之劍 2016.5.6 01:26:31 編程的本質(zhì) 讀到兩篇文章,寫的不錯, 綜合摘錄一下 復(fù)合是編程的本質(zhì) 函數(shù)式程序員在洞察問題方面會遵循...

    miracledan 評論0 收藏0
  • PHP并發(fā)IO編程之路

    摘要:下文如無特殊聲明將使用進程同時表示進程線程。收到數(shù)據(jù)后服務(wù)器程序進行處理然后使用向客戶端發(fā)送響應(yīng)。現(xiàn)在各種高并發(fā)異步的服務(wù)器程序都是基于實現(xiàn)的,比如。 并發(fā) IO 問題一直是服務(wù)器端編程中的技術(shù)難題,從最早的同步阻塞直接 Fork 進程,到 Worker 進程池/線程池,到現(xiàn)在的異步IO、協(xié)程。PHP 程序員因為有強大的 LAMP 框架,對這類底層方面的知識知之甚少,本文目的就是詳細介...

    Riddler 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<