3

我的背景是 Perl/Python/node 和少量的 Ruby。我以前没有使用过 BEAM VM 语言。

在 Perl/Python/Node/Ruby 中,如果我想处理“低级”任务——密集计算、需要访问线程,或者更常见的是包装 C 库——我会用 C 编写一些东西。Elixir/Erlang 显然有Erlang 进程形式的出色并行性和非常低的延迟,消除了大部分需求。

因此,如果我有一个 C 库,是制作 Elixir/Erlang 包装器还是重新实现功能更好?

一个非常具体的例子:Elixir/Erlang 的 TLS 是使用 OpenSSL,还是用 BEAM 语言实现?

4

1 回答 1

9

在 Erlang 中实现事物的通常方法是先在 Erlang 中实现它,然后测量它。如果表现不佳,请先在 Erlang 中寻找改进。如果还不够好,请用 C 重写热门部分。如果数据传输会杀死它,您可以使用端口作为更安全的方式或NIF 。背后的基本原理是 Erlang(或 Elixir)为编写简单、安全的代码提供了一个很好的环境。它提供了出色的异常处理和对可靠性的支持。您可以将 Erlang 视为一种特定领域的语言,用于编写服务器服务和容器,用于处理并发任务并将负载分配到 CPU 并以另一种语言的高性能小块代码执行。你必须用其他语言而不是 Erlang/Elixir 实现的代码越少越好。

如果你认为二进制协议处理是低级的,那么一定要尝试在 Erlang 中实现它,因为 Erlang 中的位操作语法真是太棒了。

是的,TLS 主要是用 Erlang(密钥处理、IO 等)编写的,性能关键部分是用 C 语言(哈希和加密算法)编写的。

一个非常好的建议是:总是衡量,不要期望。您甚至可以看到在纯 Erlang 中实现的性能比在 C++ 中更好的解决方案。请参阅比较摩托罗拉电信软件的 Cpp 和 Erlang

于 2015-09-12T16:50:50.023 回答