我有一个 C 服务器(一个数据馈送处理程序),它有可能在几千个长期存在的 Erlang 进程中每秒发送数百万条微小消息。在一天之内,其中一些进程将收到几千 条消息,而其他进程将收到几千万条数百万 消息。我的兴趣有三方面:
最小化延迟——缩短从 C 服务器发送消息到 Erlang 进程接收消息的时间长度。对于发送消息之前或接收消息之后发生的事情,可以做很多工作,但这个问题是关于 C 和 Erlang 之间的链接。
最大化吞吐量——越快越好;如果 C 服务器可以在所有 Erlang 进程中每秒多发送 10% 的消息,那就是一个巨大的胜利。
最大限度地提高可预测性——如果由于网络拥塞等原因导致延迟或吞吐量突然下降几个数量级,那将是一个巨大的失败。
如何以高性能方式将消息从 C 程序发送到 Erlang 进程?我可以采取什么技巧来最小化延迟、最大化吞吐量或使 Erland 和 C 之间的通信更可预测?这有很多方面。我们可以选择 Erlang 程序与其他程序之间通信的协议(protocol)。我们可以使用带有“C 节点”的分布式 Erlang 来实现 Erlang 和 C 之间的通信。我们可以使用端口或链接驱动程序。
最佳答案
我建议您反转您的系统,将您的 C 代码作为链接驱动程序嵌入到 Erlang VM 中。恕我直言,这是您如何以可管理的方式实现最快解决方案的方式。
关于c++ - 从 C 到 Erlang 的高性能消息传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3835043/