Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从C到Erlang的高性能消息传递_C++_C_Erlang - Fatal编程技术网

C++ 从C到Erlang的高性能消息传递

C++ 从C到Erlang的高性能消息传递,c++,c,erlang,C++,C,Erlang,我有一个C服务器(一个数据提要处理程序),它有可能在几千个长寿命的Erlang进程中每秒发送数百万条小消息。在一天之内,其中一些进程将收到几千条消息,而另一些进程将收到数千万条消息。我的兴趣有三方面: 最小化延迟—缩短从C服务器发送消息到Erlang进程接收消息的时间长度。在发送消息之前或接收消息之后发生的事情上可以做很多工作,但是这个问题是关于C和Erlang之间的链接 最大化吞吐量-越快越好;如果C服务器能够在所有Erlang进程中每秒多发送10%的消息,那将是一个巨大的胜利 为了最大限度地

我有一个C服务器(一个数据提要处理程序),它有可能在几千个长寿命的Erlang进程中每秒发送数百万条小消息。在一天之内,其中一些进程将收到几千条消息,而另一些进程将收到数千万条消息。我的兴趣有三方面:

  • 最小化延迟—缩短从C服务器发送消息到Erlang进程接收消息的时间长度。在发送消息之前或接收消息之后发生的事情上可以做很多工作,但是这个问题是关于C和Erlang之间的链接

  • 最大化吞吐量-越快越好;如果C服务器能够在所有Erlang进程中每秒多发送10%的消息,那将是一个巨大的胜利

  • 为了最大限度地提高可预测性——如果延迟或吞吐量会因为网络拥塞等原因突然降低几个数量级,那将是一个巨大的失败

  • 如何以高性能的方式将消息从C程序发送到Erlang进程?我可以做些什么来最小化延迟、最大化吞吐量或使Erland和C之间的通信更可预测?这有很多方面。我们可以选择Erlang程序和其他程序之间的通信协议。我们可以使用带有“C节点”的分布式Erlang在Erlang和C之间进行通信。我们可以使用端口或链接的in驱动程序。

    使用?
    您可能需要一个更轻量级的解决方案,但由于有一个消息中间件组件已经用Erlang编写并实现,所以应该可以很容易地试用并查看它的运行情况…

    我建议您反转您的系统,将您的C代码作为驱动程序中的链接嵌入Erlang VM。我想这是如何以可管理的方式实现最快的解决方案。

    Erlang进程和C服务器是否在同一台机器上运行?
    @caf:
    C服务器不一定与任何Erlang节点在同一台机器上,而且它肯定不像它们那样分布。它是外部数据提供者和Erlang系统之间的中间人,就像这样:
    (外部数据源)->(C-server)->(Erlang系统)
    。如果您想要最小化延迟和最大性能,RabbitMQ不是您的人。RabbitMQ是具有丰富路由、配置和持久性支持队列的通用消息系统。通过专门的优化解决方案,您可以在数量级上击败它,但您必须投入更多数量级的时间来实现和调试。它通常用于非持久性模式,我说过“您可能需要更轻的解决方案”。。。