The layout of PID & PORT in the ERTS

轉載請註明,來自:http://blog.csdn.net/skyman_2001

我在調試erts時發現PID和PORT ID在底層是個整型,但是在erlang層的表示是<A.B.C>和#Port<A.B>的格式,它們之間是怎麼轉換的呢?通過grep發現在erts/emulator/beam/erl_term.h裏有關於PID和PORT的layout說明,這裏只談論本節點情況下的layout:

 *  PID layout (internal pids):
 
    |3 3 2 2 2 2 2 2|2 2 2 2 1 1 1 1|1 1 1 1 1 1    |               |
    |1 0 9 8 7 6 5 4|3 2 1 0 9 8 7 6|5 4 3 2 1 0 9 8|7 6 5 4 3 2 1 0|
    |               |               |               |               |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |n n n n n n n n n n n n n n n n n n n n n n n n n n n n|0 0|1 1|
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 
   n : number

 *  PORT layout (internal ports):
 
   |3 3 2 2 2 2 2 2|2 2 2 2 1 1 1 1|1 1 1 1 1 1    |               |
   |1 0 9 8 7 6 5 4|3 2 1 0 9 8 7 6|5 4 3 2 1 0 9 8|7 6 5 4 3 2 1 0|
   |               |               |               |               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |n n n n n n n n n n n n n n n n n n n n n n n n n n n n|0 1|1 1|
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 
   n : number

示例:
1. pid爲3683,二進制表示爲111001100011,去掉tag,則爲11100110,換算成十進制則爲230,則外部表示則爲<0.230.0>;
2. port id爲61111,二進制表示爲1110111010110111,去掉tag,則爲111011101011,換算成十進制則爲3819,則外部表示則爲#Port<0.3819>。

發佈了184 篇原創文章 · 獲贊 13 · 訪問量 71萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章