爲何不少遊戲服務端仍是用C++來寫

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

 

  C++:c++

 

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

 

  CPU利用率:C++在這方面的優點不須要討論。編程

 

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

 

  穩定性和容災性:用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++開發的效率並不低。雖然它對新來者不是很友好,但從技術選擇的角度來看,它仍然是許多領域的最佳選擇。

相關文章
相關標籤/搜索