【问题标题】:Why is Erlang said to be more suited for server side programming in webgames than Java and C++?为什么说 Erlang 比 Java 和 C++ 更适合网页游戏中的服务器端编程?
【发布时间】:2021-01-02 06:03:03
【问题描述】:

我不太明白,Erlang 怎么可能比 C++ 更高效?

【问题讨论】:

标签: java c++ erlang


【解决方案1】:

Erlang 的效率远低于 C++。 Erlang 的最大优势是可扩展性,而不是效率。它将跨多个 CPU 线性扩展,并且由于其编程和通信模型,将非常容易跨机器集群扩展。

需要明确的是,Erlang 不会比 C++ 扩展更多;它只是比 C++ 更容易扩展。 很多更容易。请参阅Concurrent Programming in Erlang 的第 5 章和第 6 章,以很好地解释为什么会这样。

【讨论】:

    【解决方案2】:

    我可以看到几个原因:

    • 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 support - behind the scenes at (14:00))。与 Java 相比,Erlang 的垃圾收集是按进程完成的(一个小得多的单元),这在实时系统中非常有用。

    专为可用性而设计

    Erlang 专为可用性至关重要的电信应用程序而设计。可用性功能之一是应用程序可以在运行时通过热代码交换进行更新。如果您想在游戏服务器仍然在线时更新它,这会很有用。

    我会推荐看看这个演示文稿:Erlang - Software for a concurrent world

    【讨论】:

      【解决方案3】:

      当 Erlang 被提升为优于 C 时,这与效率无关。它与错误处理和并发性有关。使用正确的 OTP 原则用 Erlang 编写的服务器将自动具有从错误中恢复的出色方法。

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

      【讨论】:

      • 不一定会更稳定:一个编写良好的 C++ 应用程序也可以同样稳定。 Erlang 只是为您处理稳定性和错误处理,因此您无需编写任何代码来执行此操作。
      • 你是对的。我应该说任何人都可以编写稳定的 Erlang 应用程序,而您需要成为大师才能用 C 编写稳定的应用程序。但特别是如果 Erlang 系统的某些部分崩溃它不会影响系统的其余部分,而这对 C 来说是不正确的。
      猜你喜欢
      • 2023-04-04
      • 2011-09-05
      • 2013-08-20
      • 2015-03-24
      • 1970-01-01
      • 1970-01-01
      • 2011-11-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多