【发布时间】:2014-08-14 20:12:59
【问题描述】:
我在使用啤酒时遇到了问题。 在 lager 源代码中,lager_backend_throttle.erl 文件。
handle_event({log, _Message},State) ->
{message_queue_len, Len} = erlang:process_info(self(), message_queue_len),
case {Len > State#state.hwm, State#state.async} of
{true, true} ->
%% need to flip to sync mode
lager_config:set(async, false),
{ok, State#state{async=false}};
{false, false} ->
%% need to flip to async mode
lager_config:set(async, true),
{ok, State#state{async=true}};
_ ->
%% nothing needs to change
{ok, State}
end;
当 message_queue_len 大于 Threshold 时,它会翻转到同步模式。
当message_queue_len小于Thershold时,会转为异步模式。
我认为当消息太多时,应该将模式更改为异步以更快地处理消息。为什么要以这种方式进行大型设计?
我猜测的原因是message_queue中存在限制长度,如果消息太多,进程可能会崩溃。所以较大的通过改变发送模式来降低发送消息的速度?
【问题讨论】:
标签: erlang erlang-otp