• 下載頻道 http://www.xslszxw.com/down/
  • 開源并發框架 Skynet

    發布日期:2013-08-07 22:13:03
    Tag標簽:  Skynet  
    • 關鍵詞:
        Skynet  
    • 所屬欄目:
      綜合
    • 支持平臺:
      WinXP/Win7/x86_64  
    • 支持語言:
        
    • 授權協議:
        
    • Skynet 是一個基于 Actor 模式的開源并發框架。

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

      這個系統是單進程多線程模型。

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

      每個服務都是嚴格的被動的消息驅動的,以一個統一的 callback 函數的形式交給框架。框架從消息隊列里取到消息,調度出接收的服務模塊,找到 callback 函數入口,調用它。服務本身在沒有被調度時,是不占用任何 CPU 的。框架做兩個必要的保證。

      一、一個服務的 callback 函數永遠不會被并發。

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

      我用多線程模型來實現它。底層有一個線程消息隊列,消息由三部分構成:源地址、目的地址、以及數據塊。框架啟動固定的多條線程,每條工作線程不斷的 從消息隊列取到消息。根據目的地址獲得服務對象。當服務正在工作(被鎖住)就把消息放到服務自己的私有隊列中。否則調用服務的 callback 函數。當 callback 函數運行完后,檢查私有隊列,并處理完再解鎖。

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

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

    下載標題  (選擇版本點擊標題下載) 文件 資源大小
    6 官網下載 110KB
    次元立方 - 廣告服務 - 隱私聲明 - 版權申明 - 免責條款 - 網站地圖 - 網友投稿 - 聯系方式
    本站內容來自于互聯網,僅供用于網絡技術學習,學習中請遵循相關法律法規
    彩票联盟网站 西乌珠穆沁旗| 时尚|