Cos'è il Synchronous Call Trick/Ref Trick in BEAM
Recentemente abbiamo letto il libro BEAM come parte del nostro gruppo di lettura. Nel capitolo 7 c'è un'allusione al trucco dell'arbitro/trucco della chiamata sincrona in Erlang.
Sfortunatamente, il libro è incompleto e dopo la discussione non siamo riusciti a capire quale fosse il trucco dell'arbitro.
Risposte
Quando esegue un receive
, BEAM VM esegue la scansione della casella di posta per trovare il primo messaggio adatto (corrispondente) e blocca il processo se non ne trova nessuno.
Il "trucco" è che, poiché è impossibile che un nuovo riferimento si trovi nella casella di posta prima che sia stato creato, non è necessario eseguire la scansione dell'intera casella di posta quando receive {Reference, Term}
, solo dal punto in cui Reference
è stato creato.
Questo è il significato della seguente frase:
The compiler recognizes code that uses a newly created reference (ref) in a receive (see [ref_trick_code]), and emits code to avoid the long inbox scan since the new ref can not already be in the inbox.