我希望在Erlang中实现异步消息的速度,但仍然需要一些流程控制。我该怎么做?
现在没有进程内存限制 - 它在邮件列表等讨论中。你可以查看那些线程。
好处是,当你使用OTP模式实现像gen_server这样的东西时,你有很多自由度来从进程队列中检索消息并测量队列的长度。
Rabbitmq中使用的gen_server2通过将消息移动到内部数据结构来优化此过程。 当内部队列太长时,你可以丢弃任何新的传入消息。 你可以静默地执行或通知发送方拒绝该消息。
所有这些都是非常低级别的操作。
RabbitMQ将在AMQP级别上提供此功能。
一种常见且相当好的强制流量控制的方法是将精选的消息转化为调用,限制每个客户端可以向服务器加载多少负载,从而以极其简单的方式提供强制反馈。当然,诀窍在于选择使用同步调用的通信方式 :-)
gen_server:call
,但我更感兴趣的是介于两者之间的中间地带。 - Eric des Courtis