gpt4 book ai didi

erlang - 在 Erlang 中执行计算密集型任务而不牺牲可扩展性的最佳方法是什么?

转载 作者:行者123 更新时间:2023-12-02 14:43:14 27 4
gpt4 key购买 nike

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

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

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

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

  • NIF:Loic总和他们进展顺利。

一些人主张使用 OpenCL,基本上将资源匮乏的计算委托(delegate)给 GPU,同时让 Erlang 模拟器拥有 CPU。这听起来很棒,但您的服务器需要配备合适的 GPU。

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

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

最佳答案

实际上所有的解决方案都会发生。由于我一直与其中一些人密切合作,我可以说以下内容:

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

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

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

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

关于erlang - 在 Erlang 中执行计算密集型任务而不牺牲可扩展性的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32846615/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com