<div dir="ltr">Hi list,<div><br></div><div>Today (yeah, just a couple years have passed since R14A) I learned about OTP-8623, which allows to do selective receive for messages that contain a known reference with O(1) complexity.</div>
<div><br></div><div>Which made me think: what if we make a gen_server'ish process that:</div><div>1. Creates a reference that is being passed along with the pid, meaning, our start_link returns {ok, {Pid, ManageRef}} or something like that. ManageRef is actually created within the new process inside init/1 or such.</div>
<div>2. Introduce an operation named priority_call, which, basically, sends something like {ManageRef, {Pid, Ref}, Msg}.</div><div>3. The process itself (on its own side) does a selective receive like that:</div><div><br>
</div><div>receive</div><div>    {ManageRef, From, Msg} -> handle_call(From, Msg, State)</div><div>after 0 -></div><div>    receive</div><div>        Msg -> gen_server_like_dispatch_msg(Msg)</div><div>    end</div>
<div>end</div><div><br></div><div>This could potentially help with sending managing messages to the processes that may have overloaded inbox with thousands of messages. Say, we see that the process gets overloaded and we send an operational message of some kind ("discard the entire inbox", for example).</div>
<div><br></div><div>Thoughts?</div><div><br></div><div>-- <br>Best regards,<br>Dmitry Demeshchuk
</div></div>