3

Erlang 互操作性指南讨论了不同的互操作性机制。以下是我的结论:

  • 端口和 Erl_Interface 程序:操作系统调度,限制可扩展性。

  • 端口驱动程序:很危险,因为端口驱动程序崩溃也会导致模拟器崩溃。

  • C 节点:节点服务器需要像 Erlang 应用程序一样扩展,以避免牺牲可扩展性。

  • NIF:Loic很好地总结了它们。

一些人提倡使用 OpenCL,基本上将资源匮乏的计算委托给 GPU,同时让 Erlang 模拟器拥有 CPU。这听起来棒极了,但是你需要你的服务器有一个合适的 GPU。

使用 JInterface 并与为每个请求生成一个线程的 Java 进程通信可能是一种选择。

那么有没有人遇到过经过实践测试并证明效果很好的解决方案?

4

1 回答 1

3

实际上所有的解决方案都会发生。由于我一直与他们中的一些人紧密合作,我可以说以下几点:

  • 端口是安全的,但端口通信很慢。如果端口崩溃,VM 会继续工作。如果您不与您的端口进行广泛的通信或者您不信任该端口 - 这是您的选择

  • NIF 非常快。如果您的数据流很好,您应该使用它们。当然,它们是不安全的,因此您必须仔细编写 NIF 库,并且最好学习一些 C 语言(大多数 NIF 创建者都会跳过这一点)。实际上,使用特定模式可以轻松克服调度问题。您应该在从 Erlang 接收数据并从 Erlang 线程分离处理后立即启动执行实际工作的新 C 线程。所以你很快就退出了 NIF 函数,返回 Erlang 并等待来自 C 代码的消息。

  • Java节点或C节点用于可以完全移动到节点的任务。那是一些漫长而繁重的工作。

牢记上述注意事项,您可以决定最适合您的任务的方式。

于 2015-09-29T18:25:01.530 回答