• 熱門專題

為何很多游戲服務端還是用C++來寫?

作者:wy  發布日期:2019-01-12 08:37:00
Tag標簽:游戲服務端  C++編制  C++游戲  
  •   說到游戲就必須說到C++,他們就像是共同體一樣分不開,這篇文章就是分析C++的利與弊,然后再加以分析為何總是用C++來編寫游戲客戶端?

      按應用領域來說,C++適用于開發服務器軟件、桌面應用、游戲、實時系統、高性能計算、嵌入式系統等。拿游戲來說,不同的游戲之間的業務邏輯和適用架構也存在很大差別。比如對于大部分手游、頁游來說,追求短平快的開發節奏也不要求太高的實時性和計算效率,C++在這些領域的使用屬于殺雞用牛刀。下面我就得分別說說C++和其他編程語言在游戲開發上的優劣勢對比:C++:

      網絡 IO:歷史上這方面曾經是考量的主要因素,近年來幾乎所有主流后端語言都封裝有高效的網絡 IO 庫,C++ 已不具備獨特優勢。

      CPU 利用率:C++ 在這方面的優勢不需要討論了。

      實時性:無 GC,內存分配延遲可控(內存池、預分配等),毫秒級延遲需求的高頻交易都在用。

      穩定性和容災:用C++寫出長期穩定運行的服務器程序,對開發團隊而言是件要求比較高的事情,尤其在邏輯復雜又變更頻繁的前提下。語言本身也不保證內存訪問的安全性,如果有內存寫越界導致的Crash也很難定位。國內某大廠采用了分離數據和邏輯進程,通過進程間共享內存來通信的方式,來實現邏輯進程崩潰重啟不丟失數據。不過這種做法有一定門檻,存在性能開銷,而且對開發效率和靈活性也有比較大的約束,也不易整合第三方庫,不能算是通用的最佳實踐。

      開發效率:如果有良好的內力和C++編程素養,并且配合現代C++的一些語法(auto、lambda、智能指針等),開發效率尚可算是勉強及格,但相對以下討論的其他語言來說仍處于劣勢,然而達到上述水準的人力資源成本卻要比其它語言要高出不少(人員補充速度、培訓周期和薪資)。綜合而言,這方面可算 C++的一大短板。Java:

      優點:

      生態圈成熟,庫豐富。

      Netty 網絡庫性能強悍。

      不爽語法還可以用 scala 和 kotlin...

      缺點:

      除了原始類型外,不支持自定義值類型。而且泛型是以類型擦除的方式實現。這樣的特性導致了:難以把數據連續緊湊地進行表示來優化算法的緩存命中率,比如2D地圖的每個格子坐標都是個object。3D 場景的碰撞體每個頂點都是個object。對原本對實時性不甚友好的 GC 造成了更大壓力。

      C++

            成熟的 JVM 實現并不怎么側重 GC 的實時性。如果觸發了百毫秒以上的世界凍結 GC 延遲,所有在線玩家都會受到影響。

      JIT 在預熱不足的情況下,偶爾會導致性能曲線不平滑,引入預料之外的響應延遲。C#:

      優點:

      開發友好,語法糖甜。

      有真正的泛型和值類型。特定算法好優化。

      缺點:

      微軟家的。微軟家的。微軟家的。跑在 Windows Server下沒什么問題,然而拋開授權費不談,大部分主流的開源好物都是優先考慮 Unix / Linux,比如 Redis(長期沒有 Windows 版本的官方支持)、MongoDB(Windows 下性能要弱于 Linux 下),而且 Windows Server 的網絡性能也要弱一些。除非解決方案都用微軟全家桶,不然部署和運維就需要同時維護兩個平臺...至于 Mono,跟 JVM 比起來就像玩具。只能期待 Rosalyn 成熟了。

      GC 實時性類似 Java。Go:

      優點:

      語法簡單易掌握。

      開發體驗友好。

      有值類型。

      新版本的 Go,GC 實時性良好(1.8 號稱 STW 控制在 1ms 以內)。

      缺點:

      沒有范型,某些地方需要轉型成 interface{},不過編譯器會做逃逸分析,不必要的地方不會自動 boxing,影響不算太嚴重。Rust:

      優點:

      運行效率比肩 C++。

      語言特性優秀。

      編譯期保證了內存安全,沒有 GC 開銷。

      編譯期保證線程安全,可以放心大膽地并發,容易寫出高效的多線程代碼。

      缺點:

      上手曲線較陡。

      太年輕,生態圈尚未成熟。

      較小眾,人員補充困難。

      根據本篇文章從優缺點、實用性、利用率相結合總結性發言為什么總是使用C++來編寫游戲客戶端的原因和結果。更多資訊詳情,請觀看我網站其他欄目信息,謝謝你的支持。

延伸閱讀:

About IT165 - 廣告服務 - 隱私聲明 - 版權申明 - 免責條款 - 網站地圖 - 網友投稿 - 聯系方式
本站內容來自于互聯網,僅供用于網絡技術學習,學習中請遵循相關法律法規
香港最快开奖现场直播结果