以太坊作为全球领先的智能合约平台,其核心是以太坊虚拟机(EVM)来执行智能合约代码,在早期,以太坊面临着与许多区块链类似的挑战:如何在保证安全性和去中心化的前提下,提升交易处理的效率和吞吐量,即实现有效的并发处理,本文将深入探讨以太坊实现并发的不同方式,从其最初的“伪并发”模型到当前向多线程演进的各种尝试与实现。
早期以太坊的“伪并发”模型:单线程执行与交易排队
在以太坊的早期阶段和许多其他区块链(如比特币)中,交易处理本质上是单线程的,其并发模型可以概括为“顺序执行 + 交易排队”:
- 交易池(Mempool):用户发起的交易首先进入节点的交易池,交易池是一个暂存区域,交易在这里等待被矿工打包进区块。
- 交易排序:矿工(或验证者)从自己的交易池中选择交易,并按照一定的规则(如Gas Price高低、交易发起时间等)进行排序,这个排序过程决定了交易的执行顺序。
- 区块打包与顺序执行:矿工将选定的交易打包成一个区块,广播到网络中,其他节点在验证区块时,会严格按照区块中交易的顺序,在EVM上逐个执行这些交易,每个交易执行完成后,其状态变更(如账户余额、合约存储)才会应用到以太坊的全局状态中,下一个交易才能开始执行。
这种模型的“并发”体现在何处?
- 网络层面的并行:不同的节点可以并行验证不同的区块(如果它们分叉了)。
- 交易池的并行处理:节点可以并行接收和广播交易。
但这种模型的局限性非常明显:
- 吞吐量低:由于交易必须严格顺序执行,一个复杂交易的执行会阻塞后续所有交易的执行,导致TPS(每秒交易处理量)较低。
- 性能瓶颈:EVM的单线程执行模型无法充分利用现代多核CPU的计算能力。
- 延迟问题:用户交易需要等待前面的交易执行完毕,确认时间较长。
以太坊2.0的基石:分片(Sharding)与跨分片通信
为了从根本上解决可扩展性问题,以太坊2.0引入了