# EVM的並行化之路:從串行到多線程執行衆所周知,EVM是以太坊的核心執行引擎,負責智能合約的運行。爲了確保不同節點上的智能合約能夠得到相同的執行結果,EVM提供了一個統一的虛擬環境,類似於Java虛擬機JVM。智能合約在部署到區塊鏈上時,會先被編譯成EVM字節碼。EVM在執行合約時,會按順序讀取這些字節碼,每條指令都有相應的Gas成本。EVM會追蹤每條指令執行時的Gas消耗,消耗量取決於操作的復雜度。傳統的EVM採用串行方式處理交易,所有交易在單一隊列中排隊按順序執行。這種設計簡單易維護,但隨着用戶羣體增長和對TPS要求提高,串行執行的性能瓶頸日益凸顯,尤其在Layer解決方案中更爲明顯。除EVM外,以太坊交易執行的另一個核心組件是stateDB,用於管理帳戶狀態和數據存儲。EVM每次執行交易都會更新stateDB中的數據,這些變更最終反映在全局狀態樹中。在串行執行模式下,EVM和stateDB協作處理交易的過程如下:1. 一個區塊內的交易按順序逐筆處理2. 每筆交易使用獨立的EVM實例,但共用同一個stateDB 3. EVM執行過程中不斷與stateDB交互,讀取和寫入數據4. 所有交易處理完畢後,將stateDB中的變更提交到全局狀態樹這種串行模式的主要問題是,復雜的智能合約交易會阻塞其他交易,無法充分利用硬件資源。爲解決這一問題,一些項目開始探索EVM的並行優化方案。以某Layer項目爲例,其核心思路是爲每個線程分配一個臨時狀態數據庫(pending-stateDB):1. 多線程並行執行不同交易2. 每個線程使用獨立的pending-stateDB記錄狀態變更3. 所有交易執行完畢後,將pending-stateDB中的變更同步到全局stateDB該方案對讀寫操作做了特殊處理:- 讀操作優先檢查pending-stateDB,若無數據則讀取全局stateDB- 寫操作暫存在pending-stateDB中,不直接修改全局stateDB爲避免狀態衝突,該方案引入了衝突檢測機制:- 監測不同交易的讀寫集是否有重疊- 發現衝突時標記相關交易需要重新執行最後,將多個pending-stateDB的變更合並到全局stateDB,生成新的狀態根。這種並行優化方案在低衝突工作負載下,可將TPS提升3-5倍。在高衝突情況下,理論上可達到60倍提升。總的來說,EVM的並行化是提升以太坊及其Layer性能的重要方向。通過多線程並行執行和臨時狀態庫等技術,可以在保證一致性的前提下,大幅提高交易處理能力。未來還可以通過進一步優化存儲效率、改進衝突處理策略等手段,進一步提升EVM的性能。
EVM並行化突破:多線程執行提升交易處理能力
EVM的並行化之路:從串行到多線程執行
衆所周知,EVM是以太坊的核心執行引擎,負責智能合約的運行。爲了確保不同節點上的智能合約能夠得到相同的執行結果,EVM提供了一個統一的虛擬環境,類似於Java虛擬機JVM。
智能合約在部署到區塊鏈上時,會先被編譯成EVM字節碼。EVM在執行合約時,會按順序讀取這些字節碼,每條指令都有相應的Gas成本。EVM會追蹤每條指令執行時的Gas消耗,消耗量取決於操作的復雜度。
傳統的EVM採用串行方式處理交易,所有交易在單一隊列中排隊按順序執行。這種設計簡單易維護,但隨着用戶羣體增長和對TPS要求提高,串行執行的性能瓶頸日益凸顯,尤其在Layer解決方案中更爲明顯。
除EVM外,以太坊交易執行的另一個核心組件是stateDB,用於管理帳戶狀態和數據存儲。EVM每次執行交易都會更新stateDB中的數據,這些變更最終反映在全局狀態樹中。
在串行執行模式下,EVM和stateDB協作處理交易的過程如下:
這種串行模式的主要問題是,復雜的智能合約交易會阻塞其他交易,無法充分利用硬件資源。
爲解決這一問題,一些項目開始探索EVM的並行優化方案。以某Layer項目爲例,其核心思路是爲每個線程分配一個臨時狀態數據庫(pending-stateDB):
該方案對讀寫操作做了特殊處理:
爲避免狀態衝突,該方案引入了衝突檢測機制:
最後,將多個pending-stateDB的變更合並到全局stateDB,生成新的狀態根。
這種並行優化方案在低衝突工作負載下,可將TPS提升3-5倍。在高衝突情況下,理論上可達到60倍提升。
總的來說,EVM的並行化是提升以太坊及其Layer性能的重要方向。通過多線程並行執行和臨時狀態庫等技術,可以在保證一致性的前提下,大幅提高交易處理能力。未來還可以通過進一步優化存儲效率、改進衝突處理策略等手段,進一步提升EVM的性能。