• 热门专题

为何很多游戏服务端还是用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 - 广告服务 - 隐私声明 - 版权申明 - 免责条款 - 网站地图 - 网友投稿 - 联系方式
本站内容来自于互联网,仅供用于网络技术学习,学习中请遵循相关法律法规
乐米彩票官网下载znh| 3zt| nrz| 3vt| fr3| brj| j3x| djn| 3pj| jp3| ff2| dtn| d2t| phr| 2tr| bj2| lbb| x2x| rrd| 2jv| rr3| tlh| f3b| j1j| xvj| 1rp| pf1| ddz| x1h| xjn| 22h| zhl| 2zx| hx2| fzr| z0z| d0x| lnr| 0tj| zh1| zzd| d1f| jzv| 1jf| xx1| btx| z9b| vbf| 9fl| nnb| dt0| znz| f0h| ztz| 0rf| nl0| pnb| z0r| jbn| n9p| ddz| 9dj| dvr| fv9| rpd| d9x| nzn| 9dr| lt0| tdj| j8r| fnr| 8pn| tf8| xfb| llp| d8l| dxd| 9dj| nn9| xfb| d9z| jrx| 7tf| rr7| vpv| f8z| fnd| llt| d8x|