本文目錄一覽:
- 1、使用Go 語言開發大型 MMORPG 遊戲伺服器怎麼樣
- 2、一起使用GO(golang) 來做一個後台管理系統系列10 使用mod 來管理包
- 3、面試問題總結(一)Golang
- 4、golang直接io的使用
使用Go 語言開發大型 MMORPG 遊戲伺服器怎麼樣
從2013年起,經朋友推薦開始用Golang編寫遊戲登陸伺服器, 配合C++做第三方平台驗證. 到編寫獨立工具導表工具GitHub – davyxu/tabtoy: 跨平台的高性能便捷電子表格導出器. 以及網路庫GitHub – davyxu/cellnet: 簡單,方便,高效的Go語言的遊戲伺服器底層. 最終使用這些工具及庫編寫整個遊戲伺服器框架, 我的感受是很不錯的
細節看來, 有如下的幾個點:
語言, 庫
Golang語言特性和C很像, 簡單, 一張A4紙就能寫完所有特性. 你想想看, C++到了領悟階段, 也只用那幾個簡單特性, 剩下的都是一大堆解決各種內存問題的技巧. 而Golang一開始就簡單, 何必浪費生命去研究那一大堆的奇技淫巧呢?
Golang的坑只有2個:1. interface{}和nil配合使用, 2. for循環時, 將循環變數引入閉包(Golang, Lua, C#閉包變數捕獲差異) 完全不影響正常使用, 複合語言概念, 只是看官方後面怎麼有效的避免
用Golang就忘記繼承那套東西, 用組合+介面
用Golang伺服器如何保證解決遊戲伺服器存檔一致性問題? stop the world是肯定的, 但是Golang可以從語言層並發序列化玩家數據, 再通過後台存檔
channel是goroutine雖然是Golang的語言特性. 但是在編寫伺服器時, 其實只有底層用的比較多.
Golang的第三方庫簡直多如牛毛, 好的也很多
不要說模板了, C#的也不好用, 官方在糾結也不要加, 使用中, 沒模板確實有點不方便. 用interface{}/反射做泛型對於Golang這種強類型語言來說,還是有點打臉
運行期
Golang和C++比性能的話, 這是C++的優勢, Golang因為沒虛擬機, 只有薄薄的一層調度層. 因此性能是非常高的, 用一點性能犧牲換開發效率, 妥妥的
1.6版後的GC優化的已經很好了, 如果你不是高性能,高並發Web應用, 非要找出一堆的優化技巧的話. 只用Golang寫點遊戲伺服器, 那點GC損耗可以忽略不計
和其他現代語言一樣, 崩潰捕捉是標配功能, 我用Golang的伺服器線上跑, 基本沒碰到過崩潰情況
熱更新: 官方已經有plugin系統的提交, 跨平台的. 估計很快就可以告別手動cgo做so熱更新
開發, 調試, 部署, 優化
LiteIDE是我首選的Golang的IDE, 雖然有童鞋說B格不高. 但這估計實在是找不到缺點說了, 別跟我說Visual Studio, 那是宇宙級的…
曾經聽說有人不看好Golang, 我問為啥: 說這麼新的語言, 不好招人,後面打聽到他是個策劃… 好吧
真實情況是這樣的: Golang對於有點編程基礎的新人來說, 1周左右可以開始貢獻代碼. 老司機2~3天.
開發效率還是不錯的, 一般大的遊戲功能, 2*2人一周3~4個整完. 這換C++時代, 大概也就1~2個還寫不完. 對接伺服器sdk的話, 大概1天接個10多個沒問題
Golang自帶性能調優工具, 從內存, CPU, 阻塞點等幾個方面直接出圖進行分析, 非常直觀, 可以參考我博客幾年前的分析: 使用Golang進行性能分析(Profiling)
Golang支持交叉編譯, 跨平台部署, 什麼概念? linux是吧? 不問你什麼版本, 直接windows上編譯輸出一個elf, 甩到伺服器上開跑.不超過1分鐘時間..
一起使用GO(golang) 來做一個後台管理系統系列10 使用mod 來管理包
原項目採用gopath來管理的引用庫,但有小夥伴反應說包不好下,雖然我把對應的包做了百度雲盤共享,但小夥伴們仍然感覺不太好用。特別是最近把go SDK升級到1.18.在管理包上終於下決心使用mod來重新重構下包管理。
一、配置啟用Mod
首先那:
確定是否開啟了
如果沒有開啟請開啟它。開啟命令執行:
#設置 使用七牛雲下載
來看下現在的配置:
二、創建項目
上邊都說了如何開啟了。下面介紹下如何使用
1. 可以隨便找一個目錄創建項目:myGoProjectNew
這個時候查看目錄下會多出一個go.mod的文件:
裡面也有了。標識了下SDK的版本1.18
2. 創建 main.go文件
3. 執行:
這時候就會自動下載引用了。
查看Go.mod文件
最後放兩張效果圖:
感覺還可以得點贊收藏哦。想要源碼的私信我獲取源碼。
面試問題總結(一)Golang
使用go語言的好處: go語言的設計是務實的, go在針對並發上進行了優化, 並且支持大規模高並發, 又由於單一的碼格式, 相比於其他語言更具有可讀性, 在垃圾回收上比java和Python更有效, 因為他是和程序同時執行的.
1. 進程, 線程, 協程的區別, 協程的優勢
2. 講一下GMP模型(重點)
3. Go的GC, 混合寫屏障(重點)
4. go的Slice和數組的區別, slice的擴容原理(重點)
5. 講一下channel,實現原理(重點)
6. 講一下Go的Map的實現原理, 是否線程安全, 如何實現安全(重點)
7. new 和 make 的區別
8. 說一下內存逃逸
9. 函數傳指針和傳值有什麼區別
10. goroutine之間的通信方式
11. 測試是怎麼做的(單元測試, 壓力測試)
12. 堆和棧的區別
golang直接io的使用
原文鏈接: ;vid=1688855587348942cst=E9F266277367B28319F39975A546E7810FB56065BDFDF61A124CA07F8C69AF9566D809347DAA8BFB56A5A5BFDAC28DACdeviceid=3f371756-5e39-4325-9fec-0b55bfeb87f5version=4.0.6.6516platform=win
所以,通過以上 AlignedBlock 函數分配出來的內存一定是 512 地址對齊的。
有啥缺點嗎?
浪費空間嘛。 命名需要 4k 內存,實際分配了 4k+512 。
開源庫地址:
原創文章,作者:LBLI,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/137434.html