為什么很多游戲服務端還是用C++來寫


  在應用領域方面,c++適合開發服務器軟件、桌面應用程序、手機游戲、實時系統、高性能計算、嵌入式系統等。在游戲的情況下,不同游戲之間在業務邏輯和適用的架構上也有很大的差異。例如,對於大多數的手工和頁面旅行,追求短而快速的開發節奏並不需要太多的實時和計算效率。c++在這些地區的使用屬於殺雞用牛刀。這里我要告訴你c++和其他編程語言在游戲開發中的優缺點:

 

  C++:

 

  網絡IO:這是歷史上的一個主要考慮因素。近年來,幾乎所有主要的后端語言都封裝了高效的網絡IO庫,而C ++沒有獨特的優勢。

 

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

 

  實時:沒有gc,內存分配延遲可以被控制(內存池,預分配等),使用的是具有毫秒延遲要求的高頻事務。

 

  穩定性和容災性:用C ++編寫長期穩定的服務器程序對於開發團隊來說是一項相對高要求的任務,特別是在邏輯復雜和頻繁更改的情況下。語言本身並不能保證內存訪問的安全性。如果有內存寫入,則崩潰也很難找到。一家大型國內工廠采用獨立的數據和邏輯流程,通過流程之間的共享內存相互通信,實現邏輯流程崩潰和重啟而不會丟失數據。但是,這種方法具有一定的閾值,性能開銷以及對開發效率和靈活性的相對較大的限制,並且集成第三方庫並不容易,這不是一般的最佳實踐。

 

  開發效率:如果你有良好的內部實力和C++編程素養,並用一些現代C++語法(Auto,LAMBDA,智能指針等),開發效率還勉強通過,但相對於下面討論的其他語言,它仍然處於劣勢,但人力資源成本達到了以上水平比其他語言(員工補充速度、培訓周)高得多。期間和工資。一般來說,這個方面可以被看作是C++的一個大的短板。

 

  Java:

 

  優點:

 

  生態圈成熟,庫豐富。

 

  Netty網絡圖書館表現強勁。

 

  不愉快的語法也可以使用scala和kotlin ......

 

  缺點:

 

  除了基元類型外,不支持自定義值類型。泛型以類型擦除的形式實現。這樣的特性使得連續、緊湊地表示數據難以優化緩存命中率,例如二維地圖的每個網格坐標都是一個對象。三維場景中碰撞器的每個頂點都是一個對象。它給GC帶來了更大的壓力,這對實時性不友好。

 

  •成熟的jvm實現並不太關注gc的實時性。如果全球凍結gc延遲超過100毫秒,所有在線玩家都會受到影響。

 

  •JIT偶爾會導致性能曲線不平穩且熱身不足,並引入意外的響應延遲。

 

  C#:

 

  優點:

 

  開發友好,語法糖甜。

 

  有真正的通用類型和值類型。具體算法得到了很好的優化。

 

  缺點:

 

  •微軟。這是一個微軟的家。這是一個微軟的家。在windows服務器下運行沒有問題,但是不管許可證費用如何,主流的開源商品大多是優先權unix/linux。例如,Redis(windows版本長期沒有官方支持)、蒙戈布(windows下的性能弱於linux下)、windows服務器的網絡性能也較弱。除非解決方案是微軟家族水桶,部署和操作將需要維護兩個平台的同時。........對於單核生物來說,它就像一個玩具。我只能期待蘿莎琳成熟。

 

  •GC實時與Java類似。

 

  Go:

 

  優點:

 

  語法簡單易掌握。

 

  開發體驗友好。

 

  有值類型。

 

  新版Go、GC實時性能良好(1.8稱為1毫秒內的STW控制)。

 

  缺點:

 

  •沒有模型,有些地方需要轉換成接口{},但編譯器會進行逃逸分析,不必要的地方不會自動裝箱,影響也不太嚴重。

 

  Rust:

 

  優點:

 

  運行效率比肩 C++。

 

  語言特性優秀。

 

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

 

  編譯時間保證線程安全,可以保證大膽並發,易於編寫高效的多線程代碼。

 

  缺點:

 

  上手曲線較陡。

 

  太年輕,還不成熟。

 

  人口較少,人們增加了困難。

 

  經過近幾年的發展,C++開發的效率並不低。雖然它對新來者不是很友好,但從技術選擇的角度來看,它仍然是許多領域的最佳選擇。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM