我的印象是,在 Erlang 中呼叫函式時,Erlang 會將整個引數從呼叫者深度復制到被呼叫者,主要由Erlang Efficiency Guide講述。但是,我確實注意到指南和原始論文主要關注記錄而不是串列。我試圖找到一個規范或其他東西來解釋 Erlang 如何傳遞串列引數,但這些努力都是徒勞的。
這時,我的一位同事來找我,告訴我 Erlang 像 C 指標和 Golang 切片一樣“通過參考”傳遞串列引數,但根據我的經驗,這似乎不是真的。由于手頭沒有可靠的知識,我無法證明我或他的假設。
我想知道是否有這樣的檔案、論文或規范可以讓我了解 Erlang 如何處理串列引數?毫無疑問,越正式越好,但實際上即使是博客或電子郵件也可以。
uj5u.com熱心網友回復:
呼叫函式時,所有資料結構都是通過參考傳遞的(“立即數”除外,例如小整數和原子,它們直接通過值傳遞)。對于普通的函式呼叫,您永遠不必擔心開銷。
但是,在生成行程時,其初始函式呼叫的任何引數都需要復制到新行程的堆中,就好像它們是在啟動時發送給行程的訊息一樣。這樣,新行程是在同一臺機器上運行還是在網路上的不同機器上運行都沒有關系。
請參閱 Beam Book 以深入了解 Beam 虛擬機的作業原理:https : //github.com/happi/theBeamBook
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/333537.html
下一篇:numpyargsort性能下降
