The priority of messages is the same. A quick search in gen_server.erl and you will find a simple loop that gets all the data.
loop(Parent, Name, State, Mod, hibernate, Debug) ->
proc_lib:hibernate(?MODULE,wake_hib,[Parent, Name, State, Mod, Debug]);
loop(Parent, Name, State, Mod, Time, Debug) ->
Msg = receive
Input ->
Input
after Time ->
timeout
end,
decode_msg(Msg, Parent, Name, State, Mod, Time, Debug, false).
About handle_info :
gen_server, - , ( ).
, timeout, tcp, udp, EXIT, sytem info , handle_call handle_cast.