将 C 库暴露给 Elixir/Erlang,还是在 Erlang/Elixir 中实现更好?

3

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

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

那么如果我有一个C库,是制作一个Elixir/Erlang包装器还是重新实现其功能更可取呢?

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


1
你正在寻求一个泛泛而谈的答案。你能不能把问题缩小一点? - Onorio Catenacci
@OnorioCatenacci 我在询问惯用的方法是什么 - 如果需要更具体的内容,请参考问题中已经给出的有关TLS的示例。 - mikemaccana
1个回答

9
在Erlang中实现事物的通常方式是先在Erlang中实现,然后进行测试。如果性能不佳,首先寻找Erlang方面的改进。如果仍然不够好,可以将热点部分重写为C语言。您可以使用端口作为更安全的方式或者NIFs(如果数据传输可能会导致问题)。背后的原理是,Erlang(以及Elixir)为编写简单、安全的代码提供了一个很好的环境。它提供了出色的异常处理和可靠性支持。您可以将Erlang视为编写服务器服务和处理并发任务、将负载分配到CPU并在另一种语言中执行高性能小代码块的领域特定语言和容器。在其他语言而不是Erlang/Elixir中实现的代码越少,越好。
如果您认为二进制协议处理是低级别的,请尝试在Erlang中实现,因为Erlang中的位操作语法非常棒。
是的,TLS大多数是用Erlang编写的(密钥处理、IO等),具有性能关键部分的C语言(哈希和加密算法)。
其中一个非常好的建议是:始终衡量,不要期望。您甚至可以看到在纯Erlang中实现的非平凡解决方案比C++实现的表现更好。请参见比较电信软件中的C++和Erlang

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