吉游网提供最新游戏下载和手游攻略!

既然C++开发效率低下,为什么很多游戏服务器还是用C++写的呢?游戏服务端程序

发布时间:2024-07-16浏览:5

从应用领域上看,C++适合开发服务器软件、桌面应用、游戏、实时系统、高性能计算、嵌入式系统等等。就拿游戏来说,不同的游戏之间在业务逻辑、适用架构等方面也存在着很大的差异。比如对于大部分的手机游戏、网页游戏来说,追求短小精悍的开发节奏,对实时性和计算效率要求并不高,在这些领域使用C++就是一把利器。接下来就不得不说一下C++与其他编程语言在游戏开发上的优缺点了:

C++:

网络IO:历史上主要考虑这方面,近些年主流的后端语言几乎都封装了高效的网络IO库,C++不再独占优势。

CPU利用率:C++在这方面的优势是不言而喻的。

实时:无需GC,内存分配延迟可控(内存池,预分配等),适合对延迟有毫秒级要求的高频交易使用。

稳定性与容灾:使用 C++ 编写长期稳定的服务端程序对于开发团队来说是一项比较艰巨的任务,尤其当逻辑复杂且变更频繁时。语言本身并不能保证内存访问的安全性,内存写越界导致的崩溃很难定位。国内某大厂曾将数据与逻辑进程分离,进程间通过共享内存进行通信,实现逻辑进程崩溃时重启而不丢失数据。但这种方式有一定的门槛,有性能开销,对开发效率和灵活性有比较大的制约,也不容易集成第三方库,不能算是放之四海而皆准的最佳实践。

开发效率:如果内功好,C++编程素养高,用一些现代C++语法(auto、lambda、智能指针等),开发效率勉强可以接受,但和下面讨论的其他语言相比还是处于劣势。而要达到上述水平,人力资源成本要比其他语言高得多(人员招聘速度、培训周期和薪酬)。总体来说,这方面可以算是C++的一大短板。

Java:

优势:

缺点:

· 除了基本类型之外,不支持自定义值类型。泛型以类型擦除的方式实现。这个特性使得很难连续紧凑地表示数据以优化算法的缓存命中率。例如2D地图的每个网格坐标都是一个对象。3D场景中碰撞体的每个顶点都是一个对象。这给GC带来了更大的压力,对实时性不太友好。

· 成熟的 JVM 实现并不太注重 GC 的实时性,如果触发超过 100 毫秒的世界冻结 GC 延迟,所有在线玩家都会受到影响。

游戏服务端程序_游戏服务端_游戏服务端是做什么的

如果JIT预热不够,有时可能会导致性能曲线不均匀,并引入意外的响应延迟。

C#:

优势:

缺点:

· 微软。微软。微软。在 Windows Server 下跑是没问题的,但是除了授权费用之外,主流开源产品大多优先考虑 Unix/Linux,比如 Redis(长期没有官方支持 Windows 版本)、MongoDB(在 Windows 下的性能弱于 Linux 下),Windows Server 的网络性能也弱一些。除非方案采用微软全家桶,否则部署和运维需要同时维护两个平台……至于 Mono,与 JVM 相比就像玩具一样,只能期盼 Rosalyn 能够成熟起来。

GC实时性能与Java类似。

去:

优势:

缺点:

· 没有泛型类型,所以有些地方需要转换成interface{},但是编译器会做逃逸分析,不会自动把不需要的地方装箱,所以影响不是太严重。

锈:

优势:

缺点:

C++经过这几年的发展,开发效率不低,虽然对于新人而言依然不太友好,但是从技术选型的角度来说,它依然是很多领域的最佳选择。

热点资讯