为什么Erlang被认为比Java和C++更适合用于Web游戏的服务器端编程?

29

我真的不明白,为什么Erlang比C++更高效?


相关链接:https://dev59.com/ZnRB5IYBdhLWcg3wXmVI - Jonas
3个回答

58

Erlang的效率远不如C ++。 Erlang的优势在于可伸缩性,而非效率。由于其编程和通信模型,它可以在多个CPU之间进行线性扩展,并且能够非常容易地跨机器集群扩展。

需要明确的是,Erlang并不会比C++更高效;它只是比C++更容易扩展。要了解为什么,请参阅Erlang并发编程第5和第6章节,这里有非常好的解释。


22
我可以看到以下几个原因:
  • Erlang是为并发而设计的
  • Erlang是为分布式系统而设计的
  • Erlang是为软实时系统而设计的
  • Erlang是为可用性而设计的

然而,它不适用于数字计算,但它具有与C和C++以及其他语言接口的良好可用性。使用正确的工具来完成正确的工作。

为并发而设计

Erlang是一种面向并发的编程语言,非常适合于可以高度并行化的应用程序,例如游戏服务器。Erlang进程比线程更轻量级,并且在进程通信方面具有良好的性能。这意味着使用Erlang实现的应用程序可以拥有比使用C++实现的应用程序更多的进程。另请参见我的问题Technically why is processes in erlang more efficient than OS threads

为分布式系统而设计

Erlang还具有内置功能,使程序员在处理分布式系统时更加高效。语言中有内置的原语,用于在进程之间发送和接收消息,如果进程位于另一个核心或计算机上,则使用方式相同。此外,当消息在进程之间发送时,程序员无需处理编组和序列化,因为这已内置于语言中。

为软实时系统而设计

Erlang旨在设计软实时系统,适用于游戏服务器。与C++相比,它具有内置的内存管理功能,对程序员更加高效。使用多个线程时,C++和malloc会遇到问题,并可能成为瓶颈(请参见演示Erlang SMP支持-幕后在(14:00))。与Java相比,Erlang的垃圾回收是按进程(一个更小的单位)进行的,这在实时系统中非常有用。
设计可用性
Erlang专为可用性关键的电信应用程序而设计。可用性功能之一是可以在运行时更新应用程序,并进行热代码交换。如果您想在游戏服务器仍然在线的情况下更新它,则可以使用此功能。
我建议查看此演示:Erlang-面向并发世界的软件

9

当Erlang被推崇为比C更好时,这不是关于效率的问题。它关乎错误处理和并发。使用正确的OTP原则编写的Erlang服务器将自动具有优秀的错误恢复方式。

你可以说Erlang对程序员来说更高效地编写服务器应用程序。而且当它运行时会更加稳定。


它不一定更稳定:一个良好编写的C++应用程序同样可以很稳定。Erlang只是为您处理稳定性和错误处理,因此您不必编写任何代码来完成这些工作。 - Sasha Chedygov
5
你是正确的。我应该说任何人都可以编写一个稳定的 Erlang 应用程序,而你需要成为一个专家才能编写一个稳定的 C 应用程序。但特别是如果 Erlang 系统的某个部分崩溃,它不会影响系统的其他部分,而对于 C 来说则不是这样。 - Daniel Luna

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接