为什么很多游戏服务端还是用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++开发的效率并不低。虽然它对新来者不是很友好,但从技术选择的角度来看,它仍然是许多领域的最佳选择。