Elixir 使用ExActor的长生不老药根据情况有没有冬眠的方法
我目前正在学习长生不老药来开发一个拍卖网站。因此,每次拍卖我都有一个工作程序,当工作程序启动时,它可能会立即进入休眠状态,但在拍卖结束前的最后N分钟内,我不希望我的工作程序在每次收到出价时都处于休眠状态(如果我错了,请告诉我,但这可能没有效率) 我已经开始使用基本GenServer OTP(handle_call,handle_info…)进行开发,我正在使用ExActor和Fsm(均来自Saša Jurić)进行重构,并尝试应用CQRS/ES 有没有一种方法可以使用ExActor实现这一点,而不返回到处理所谓的“基础” 我希望实现类似以下目标:Elixir 使用ExActor的长生不老药根据情况有没有冬眠的方法,elixir,Elixir,我目前正在学习长生不老药来开发一个拍卖网站。因此,每次拍卖我都有一个工作程序,当工作程序启动时,它可能会立即进入休眠状态,但在拍卖结束前的最后N分钟内,我不希望我的工作程序在每次收到出价时都处于休眠状态(如果我错了,请告诉我,但这可能没有效率) 我已经开始使用基本GenServer OTP(handle_call,handle_info…)进行开发,我正在使用ExActor和Fsm(均来自Saša Jurić)进行重构,并尝试应用CQRS/ES 有没有一种方法可以使用ExActor实现这一点,而
{:reply,…}
当距离拍卖结束还有不到10分钟时
{:reply,…,:hibernate}
当距离拍卖结束还有10分钟以上时。在Erlang中,休眠会执行以下操作:
- 丢弃进程调用堆栈
- 垃圾收集
- 之后,进程内存可能会减少到小于最小堆大小的值
- 进程在邮件上唤醒(如果邮箱中有邮件,它将立即唤醒)
- 醒来时,会有另一个垃圾回收,它会恢复正常的进程大小
case time_left > ten_minutes do
true -> {:reply, new_state, :hibernate}
false -> {:reply, new_state}
end
在ExActor中,它将是:
defcall your_funcion(args), state: state, do
...
case time_left > ten_minutes do
true -> set_and_reply(new_state, :hibernate)
false -> set_and_reply(new_state, timeout)
end
end
像reply
这样的宏采用可选参数,即超时值或:hibernate
atom
附言。
您可能对有关的文章感兴趣