Erlang Interoperability指南讨论了不同的互操作机制。以下是我的结论:
Ports和Erl_Interface程序:操作系统已调度,限制可扩展性。
端口驱动程序:危险,因为端口驱动程序崩溃带来了 仿真器也是如此。
C节点:节点服务器需要扩展以及Erlang应用程序以避免 可扩展性牺牲。
NIF:Loic总和 他们很好。
有些人主张使用OpenCL基本上将资源饥饿计算委托给GPU,同时让Erlang模拟器拥有CPU。这听起来很棒,但是你的服务器需要一个合适的GPU。
使用JInterface并与为每个请求生成线程的Java进程通信可能是一个选项。
那么有没有人遇到过在实践中经过测试并且结果运行良好的解决方案?
答案 0 :(得分:3)
实际上所有解决方案都会发生。由于我一直与其中一些人紧密合作,我可以说以下内容:
端口安全但端口通信速度慢。如果端口崩溃,VM继续工作。如果您没有广泛地与您的端口通信或您不信任该端口 - 这是您的选择
NIF非常快。如果您的数据流很好,您应该使用它们。当然它们是不安全的,所以你必须仔细编程NIF库,你最好学习一些C(大多数NIF创建者跳过的点)。实际上,使用特定模式可以轻松克服调度问题。您应该在从Erlang接收数据并从Erlang线程分离处理后启动实际工作的新C线程。所以你很快就退出NIF函数返回Erlang并等待来自C代码的消息。
Java节点或C节点用于可以完全移动到节点的任务。这是一些漫长而繁重的工作。
牢记以上考虑因素,您需要确定最适合您任务的方式。