首页 > 科技 >

既然C++开发效率低,为什么很多游戏服务端还是用C++来写?(2)

2018-11-28 06:24:20 网络整理 阅读:64 评论:0

不爽语法还可以用 scala 和 kotlin...

缺点:

· 除了原始类型外,不支持自定义值类型。而且泛型是以类型擦除的方式实现。这样的特性导致了:难以把数据连续紧凑地进行表示来优化算法的缓存命中率,比如2D地图的每个格子坐标都是个object。3D 场景的碰撞体每个顶点都是个object。对原本对实时性不甚友好的 GC 造成了更大压力。

· 成熟的 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++开发效率也不算低,虽然对新人依然不怎么友好,但是从技术选型的角度来看依然是很多领域的不二之选。

相关文章