1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        Skynet開(kāi)源并發(fā)框架

        聯(lián)合創(chuàng)作 · 2023-09-29 13:46

        Skynet 是一個(gè)基于 Actor 模式的開(kāi)源并發(fā)框架。

        skynet 節(jié)點(diǎn),通過(guò) master ,認(rèn)識(shí)網(wǎng)絡(luò)中所有其它 skynet 節(jié)點(diǎn)。它們相互一一建立單向通訊通道。也就是說(shuō),如果一共有 100 個(gè) skynet 節(jié)點(diǎn),在它們啟動(dòng)完畢后,會(huì)建立起 1 萬(wàn)條通訊通道。

        這個(gè)系統(tǒng)是單進(jìn)程多線程模型。

        每個(gè)內(nèi)部服務(wù)的實(shí)現(xiàn),放在獨(dú)立的動(dòng)態(tài)庫(kù)中。由動(dòng)態(tài)庫(kù)導(dǎo)出的三個(gè)接口 create init release 來(lái)創(chuàng)建出服務(wù)的實(shí)例。init 可以傳遞字符串參數(shù)來(lái)初始化實(shí)例。比如用 lua 實(shí)現(xiàn)的服務(wù)(這里叫 snlua ),可以在初始化時(shí)傳遞啟動(dòng)代碼的 lua 文件名。

        每個(gè)服務(wù)都是嚴(yán)格的被動(dòng)的消息驅(qū)動(dòng)的,以一個(gè)統(tǒng)一的 callback 函數(shù)的形式交給框架。框架從消息隊(duì)列里取到消息,調(diào)度出接收的服務(wù)模塊,找到 callback 函數(shù)入口,調(diào)用它。服務(wù)本身在沒(méi)有被調(diào)度時(shí),是不占用任何 CPU 的。框架做兩個(gè)必要的保證。

        一、一個(gè)服務(wù)的 callback 函數(shù)永遠(yuǎn)不會(huì)被并發(fā)。

        二、一個(gè)服務(wù)向兩一個(gè)服務(wù)發(fā)送的消息的次序是嚴(yán)格保證的。

        我用多線程模型來(lái)實(shí)現(xiàn)它。底層有一個(gè)線程消息隊(duì)列,消息由三部分構(gòu)成:源地址、目的地址、以及數(shù)據(jù)塊??蚣軉?dòng)固定的多條線程,每條工作線程不斷的 從消息隊(duì)列取到消息。根據(jù)目的地址獲得服務(wù)對(duì)象。當(dāng)服務(wù)正在工作(被鎖?。┚桶严⒎诺椒?wù)自己的私有隊(duì)列中。否則調(diào)用服務(wù)的 callback 函數(shù)。當(dāng) callback 函數(shù)運(yùn)行完后,檢查私有隊(duì)列,并處理完再解鎖。

        線程數(shù)應(yīng)該略大于系統(tǒng)的 CPU 核數(shù),以防止系統(tǒng)饑餓。(只要服務(wù)不直接給自己不斷發(fā)新的消息,就不會(huì)有服務(wù)被餓死)

        由于我們是在同一個(gè)進(jìn)程內(nèi)工作的。所以我對(duì)消息傳遞做了一點(diǎn)優(yōu)化。對(duì)于目前的點(diǎn)對(duì)點(diǎn)消息,要求發(fā)送者調(diào)用 malloc 分配出消息攜帶數(shù)據(jù)用到的內(nèi)存;由接受方處理完后調(diào)用 free 清理(由框架來(lái)做)。這樣數(shù)據(jù)傳遞就不需要有額外的拷貝了。

        瀏覽 25
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        編輯 分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        編輯 分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            豆花视频在线免费观看 | 啊灬啊灬啊灬快灬深用力试看五次 | 日日摸日日添夜夜爽97 | haodri成人无码免费视频 | 操逼的网址 | 国产灌醉迷奸 | 国产宴妇精品久久久久久 | 大鸡巴草逼 | 俺去俺来也www色官网免费的 | 红桃视频乱码一区二区三区 |