<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Skynet開源并發(fā)框架

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

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

          skynet 節(jié)點,通過 master ,認識網(wǎng)絡中所有其它 skynet 節(jié)點。它們相互一一建立單向通訊通道。也就是說,如果一共有 100 個 skynet 節(jié)點,在它們啟動完畢后,會建立起 1 萬條通訊通道。

          這個系統(tǒng)是單進程多線程模型。

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

          每個服務都是嚴格的被動的消息驅(qū)動的,以一個統(tǒng)一的 callback 函數(shù)的形式交給框架??蚣軓南㈥犃欣锶〉较ⅲ{(diào)度出接收的服務模塊,找到 callback 函數(shù)入口,調(diào)用它。服務本身在沒有被調(diào)度時,是不占用任何 CPU 的??蚣茏鰞蓚€必要的保證。

          一、一個服務的 callback 函數(shù)永遠不會被并發(fā)。

          二、一個服務向兩一個服務發(fā)送的消息的次序是嚴格保證的。

          我用多線程模型來實現(xiàn)它。底層有一個線程消息隊列,消息由三部分構成:源地址、目的地址、以及數(shù)據(jù)塊??蚣軉庸潭ǖ亩鄺l線程,每條工作線程不斷的 從消息隊列取到消息。根據(jù)目的地址獲得服務對象。當服務正在工作(被鎖?。┚桶严⒎诺椒兆约旱乃接嘘犃兄?。否則調(diào)用服務的 callback 函數(shù)。當 callback 函數(shù)運行完后,檢查私有隊列,并處理完再解鎖。

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

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

          瀏覽 25
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          編輯 分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          編輯 分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  超碰夜夜 | 色色777 | 日逼A片大全 | 国产精品 久久久精品岩 | 亚洲性爱网站 |