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

标签 c++ c erlang

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

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

  2. 最大化吞吐量——越快越好;如果 C 服务器可以在所有 Erlang 进程中每秒多发送 10% 的消息,那就是一个巨大的胜利。

  3. 最大限度地提高可预测性——如果由于网络拥塞等原因导致延迟或吞吐量突然下降几个数量级,那将是一个巨大的失败。

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

最佳答案

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

关于c++ - 从 C 到 Erlang 的高性能消息传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3835043/

相关文章:

erlang - 如何使用 io:getline/1 解决 io :setopts([{echo, false 中的限制}])

c++ - 如何将 LPTSTR 转换为 LPCWSTR?

C++11 unordered_set with std::owner_less-like hashing

c++ - 为什么我不能构造一个绑定(bind)?

c++ - Resharper C++ 和 Plog 记录器

c - 读取多个字符串,直到 C 中的换行符

python - Erlang 和 Python 之间的 RSA 加密

erlang - 在 Erlang 中,是否可以将正在运行的进程发送到不同的节点?

c - 在 C 中使用结构指针,即使它们没有声明

c - scanf 使用指向**变量**的指针,而不是**变量本身**