檢視原始碼 系統限制
Erlang 語言規範並未對程序數量、原子長度等設定限制。然而,為了效能和節省記憶體的原因,Erlang 語言和執行環境的實際實現中總會存在限制。
程序 - 同時存活的 Erlang 程序最大數量預設為 1,048,576。此限制可以在啟動時進行配置。如需更多資訊,請參閱 ERTS 中
+P
命令列標誌在erl(1)
手冊頁中的說明。執行時系統實例上的唯一本地程序識別符 - 在 64 位元系統上,最多可以建立
2⁶⁰ - 1
個唯一的程序識別符,在 32 位元系統上,最多可以建立2²⁸ - 1
個。已知節點 - 如果節點 X 上存在來自節點 Y 的任何 pid、port、reference 或 fun(Erlang 資料型別),或者如果 X 和 Y 已連接,則遠端節點 Y 必須為節點 X 所知。一個節點同時/曾經知道的最大遠端節點數量受限於可用的最大原子數量,用於節點名稱。除了節點名稱原子之外,所有關於遠端節點的資料都會被垃圾回收。
已連接節點 - 同時連接節點的最大數量受限於同時知道的最大遠端節點數量、可用的最大 (Erlang) port 數量或可用的最大 socket 數量。
原子中的字元 - 255.
元組中的元素 - 元組中的最大元素數量為 16,777,215(24 位元無號整數)。
二進制的大小 - 在 Erlang 的 32 位元執行時系統中,可以使用位元語法建構或匹配的最大二進制大小為 536,870,911 位元組。在 64 位元執行時系統中,最大大小為 2,305,843,009,213,693,951 位元組。如果超過限制,位元語法建構將會失敗並拋出
system_limit
例外,而任何嘗試匹配過大的二進制都會失敗。從 Erlang/OTP 27 開始,所有其他建立二進制的操作(例如list_to_binary/1
)也會強制執行相同的限制。Erlang 節點分配的總資料量 - Erlang 執行時系統可以使用完整的 32 位元(或 64 位元)位址空間,但作業系統通常會限制單個進程使用較少的空間。
節點名稱的長度 - Erlang 節點名稱的格式為
host@shortname
或host@longname
。節點名稱在系統中用作原子,因此 255 的最大大小也適用於節點名稱。開啟的 port - 同時開啟的 Erlang port 最大數量通常預設為 16,384。此限制可以在啟動時進行配置。如需更多資訊,請參閱 ERTS 中
+Q
命令列標誌在erl(1)
手冊頁中的說明。執行時系統實例上的唯一本地 port 識別符 - 在 64 位元系統上,最多可以建立
2⁶⁰ - 1
個唯一的 port 識別符,在 32 位元系統上,最多可以建立2²⁸ - 1
個。開啟的檔案和 socket - 同時開啟的檔案和 socket 最大數量取決於可用的Erlang port 最大數量,以及作業系統特定的設定和限制。
函數或 fun 的參數數量 - 255.
執行時系統實例上的唯一參考 - 每個排程器執行緒都有自己的參考集,而所有其他執行緒則有一個共用的參考集。每個參考集都包含
2⁶⁴ - 1
個唯一參考。也就是說,執行時系統實例上可以產生的唯一參考總數為(NumSchedulers + 1) × (2⁶⁴ - 1)
。如果排程器執行緒每奈秒建立一個新的參考,參考最早將在 584 年後重新使用。也就是說,在可預見的未來,它們是足夠唯一的。執行時系統實例上的唯一整數 - 由 erlang:unique_integer/1 BIF 建立的唯一整數有兩種型別。
- 使用
monotonic
修飾詞建立的唯一整數包含2⁶⁴ - 1
個唯一整數的集合。 - 沒有
monotonic
修飾詞建立的唯一整數包含每個排程器執行緒的2⁶⁴ - 1
個唯一整數的集合,以及其他執行緒共用的2⁶⁴ - 1
個唯一整數的集合。也就是說,沒有monotonic
修飾詞的唯一整數總數為(NumSchedulers + 1) × (2⁶⁴ - 1)
。
如果每奈秒建立一個唯一整數,唯一整數最早將在 584 年後重新使用。也就是說,在可預見的未來,它們是足夠唯一的。
- 使用
計時器解析度 - 在大多數系統上,為毫秒解析度。如需更多資訊,請參閱 Erlang 中的時間和時間校正 ERTS 使用者指南的計時器 章節。