• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            戰魂小筑

            討論群:309800774 知乎關注:http://zhihu.com/people/sunicdavy 開源項目:https://github.com/davyxu

               :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
              257 隨筆 :: 0 文章 :: 506 評論 :: 0 Trackbacks

            多線程+同步阻塞模型

            在我們的游戲項目中使用的golang服務器開發方式如下

            1.多線程邏輯

            2.同步阻塞. 也就是說, 每個人一個線程(goroutine), io線程=邏輯線程

            這種方式的優點:

            1. 同步阻塞方式與人的思維方式類同

            2. 邏輯處理性能有一定提升

            在大規模使用這種模式編寫邏輯后, 我們發現了這種模式只有1個缺點: 編寫者需要處理多線程關系

            但這本身確實直接致命的, 回想C++時代, 多線程處理時, 調試重現的困難… 腦補景象太慘不敢直視

            單線程+異步多進程模型

            在C++時代, 我曾經編寫過一套asio的C++服務器框架. 采用io多線程, 邏輯單線程, 依賴著C++高性能的優勢, 讓開發便捷簡單且無需關心線程問題.

            那么到了golang時代, 為什么不能試下單線程異步多進程方式來編寫邏輯?

            與多線程同步阻塞對比后, 我們發現, 兩者優缺點互補. 那這就回到了領域選型問題了. 對于游戲服務器需要的上手簡單, 開發便捷, 壓力降低(非MMO)這些特點來說, 單線程異步多進程再合適不過了

            那么, 我們在用golang編寫單線程異步多進程服務器應該注意哪些點呢?

            1. socket處理完全封裝, 只通過channel拋出到邏輯線程排隊處理

            2. 數據庫, rpc及其他io處理, 一律改為異步回調模式, 不使用同步接口

            3. 玩家存盤提交數據可以考慮復制并提交到存盤線程方式, 提高性能.

            4. 采用多進程架構, 比如設網關進程, 把io壓力分散到進程中

            5. 邏輯編寫中, 不允許使用go開線程及channel, 有需要提高性能部分需要單獨編寫

             

            Actor模型的痛

            cellnet在開發時本來考慮使用actor模型來進一步簡化多線程邏輯的麻煩, 經歷了一段時間的原型開發后, 發現了一些問題, 列舉如下:

            1. golang的強類型不適合actor模型這種經常需要動態生成各類消息的模型, 但skynet(C+lua)/erlang就有天生優勢

            2. actor模型本身不是萬能的, 不能解決所有需求, 特別是游戲

            3. actor模型理解到應用有一定的難度. 本身還需要搭建框架, 上手復雜

            總之, 看過一些erlang及skynet的用例, 沒有應用的很純正且成熟的成功actor模型案例, 從傳統socket服務器框架跨越到actor模型會扯到蛋, 因此, 后期cellnet會考慮回歸到成熟的socket服務器框架. 把架構做到簡單上手, 高擴展上.

            posted on 2015-09-09 19:06 戰魂小筑 閱讀(6704) 評論(6)  編輯 收藏 引用 所屬分類: 網絡 服務器技術Golang

            評論

            # re: 對golang服務器開發模式的一些思考 2015-09-09 23:43 威士忌
            我也是用單線程異步化的這種方式,現在是用tornado中coroutine和Future來實現。
            邏輯單線程,是無需擔心多線程問題,這點很舒服,但單線程無法很好利用多核也是覺得沒有最大化性能,或者游戲真是夠用就行。  回復  更多評論
              

            # re: 對golang服務器開發模式的一些思考[未登錄] 2015-09-10 11:37 Arthur
            1. 異步的做法在error handling那邊會比較疼的,

            同步的做法出錯了處理下就好了,Go語言的goroutine層的阻塞也不會讓底層阻塞。但是到了異步,Actor把消息丟給另一個Actor去執行,后面可能出錯,而錯誤信息的反饋就比較麻煩了。
            如果你要等結果出來,就又回到了同步時代。
            如果你不等執行結果,繼續往下走,那出錯了能回滾么?

            2. socket處理完全封裝, 只通過channel

            雖然看上去很美,性能上還是有缺陷的。
            每個連接會開兩個goroutine,中間還有channel數據傳遞引入的開銷。
            相比于epoll加回調,多執行了很多東西。goroutine is cheap,but not free

            3. 邏輯復雜以后,數據的歸屬難以處理

            Actor必然涉及到大量的消息交換。而為了效率這個肯定不是深拷貝數據的。既然還有內存共享,后面也不是一個很舒心的事情。模型出發點是不要處理低層的鎖相關,但還是不得不面臨這些問題。

            4. 一些帶執行順序的邏輯以及死鎖問題

            有些會有啟動順序或者服務依賴之類,這是用Actor模型做的時候很煩的東西。另外一個是有這種情況時,特別要注意成環死鎖。

            ....先說這些吧。同樓主一樣思考過這些東西,也踩過一些坑....
            都在探索,多交流。
              回復  更多評論
              

            # re: 對golang服務器開發模式的一些思考 2015-09-10 13:28 戰魂小筑
            @Arthur
            很給力的建言! 贊!

            P.S. 你用的Actor模型是erlang還是其他語言?  回復  更多評論
              

            # re: 對golang服務器開發模式的一些思考 2015-09-15 19:11 虞雙齊
            現在 游戲開發領域使用 Go 的越來越多了?  回復  更多評論
              

            # re: 對golang服務器開發模式的一些思考 2015-09-15 19:12 戰魂小筑
            @虞雙齊
            多  回復  更多評論
              

            # re: 對golang服務器開發模式的一些思考 2015-09-15 19:15 虞雙齊
            @戰魂小筑
            這回復速度,神!  回復  更多評論
              

            久久久久亚洲av无码专区导航| 国产成人精品久久免费动漫| 丰满少妇人妻久久久久久4| 韩国三级大全久久网站| 亚洲国产精品热久久| 青青草原综合久久大伊人| 欧美喷潮久久久XXXXx| 日韩电影久久久被窝网| 久久99国产精一区二区三区 | 国产精品伊人久久伊人电影| 久久亚洲AV无码西西人体| 精品久久久久中文字幕日本| 伊人久久大香线蕉av一区| 色诱久久av| 丰满少妇高潮惨叫久久久| 久久亚洲电影| 99久久www免费人成精品| 亚洲狠狠婷婷综合久久久久| 亚洲精品97久久中文字幕无码| 久久综合久久综合久久综合| 精品久久久久久国产潘金莲 | 精品一区二区久久| 日韩va亚洲va欧美va久久| 亚洲精品高清国产一久久| 久久精品国产网红主播| 麻豆av久久av盛宴av| 亚洲婷婷国产精品电影人久久| 久久国产高清字幕中文| 亚洲精品无码久久久久去q| 久久久久人妻精品一区三寸蜜桃| www.久久99| 99久久99久久精品免费看蜜桃 | 久久婷婷色香五月综合激情| 久久这里有精品视频| 久久亚洲精品中文字幕三区| 婷婷综合久久中文字幕蜜桃三电影| 久久99国产精品成人欧美| 久久中文字幕精品| 国内精品伊人久久久久妇| 精品久久久无码人妻中文字幕| 国产美女亚洲精品久久久综合|