智能合约中的并发性和并行性
以太坊很慢——极其缓慢。最近做一个简单的USDC审批交易,大概花了3个小时进行验证。这里有一个更有启发性的统计数据:以太坊平均每10~20秒发布一个区块。每个区块包含少于350个交易。所有这些大致转换为每秒30个交易。当批评以太坊的缓慢时,Visa的2000 tps经常被提起。也许这是一个不公平的比较,因为以太坊仍处于开发阶段。然而,以太坊似乎不太可能在短期内主宰数字金融。
以太坊的低吞吐量是一个基础性问题。以太坊是一个基于账户的区块链:账本状态被定义为一个从账户地址到一段数据的键值映射。简单的ETH交易(价值转移)可以实现账户对ETH余额数据的增减。同样,更复杂的交易(合约调用)将改变指定帐户的数据。在这种情况下,以太坊交易是全球账本状态的转换函数。这就是让以太坊虚拟机(EVM)图灵完成并允许智能合约成为可能的原因;以太坊智能合约本质上是一个可交互的账户数据。
现在让我们看看EVM如何处理或验证这些交易。并行处理所有交易是不合理的。按照设计,所有交易都试图改变整个全局状态。如果交易并行运行,EVM将偏向于竞态条件:两个程序(在本例中是交易)尝试并行地增加uint变量。因为两个程序同时访问变量,所以变量只增加一次而不是