> ## Documentation Index
> Fetch the complete documentation index at: https://docs.monad.xyz/llms.txt
> Use this file to discover all available pages before exploring further.

# 并行执行

## 概要

Monad 并行执行交易。虽然乍一看这似乎意味着不同于以太坊的执行语义,但实际上并非如此。Monad 的区块与以太坊的区块相同——一组线性排序的交易。在 Monad 和以太坊中,执行区块中交易的结果是相同的。

## 乐观执行

在基本层面上,Monad 使用乐观执行。这意味着 Monad 会在区块中较早的交易完成之前就开始执行交易。有时(但并非总是)这会导致不正确的执行。

考虑两笔交易(在区块中按此顺序):

1. 交易 1 读取并更新账户 A 的余额(例如,它从账户 B 接收转账)。
2. 交易 2 也读取并更新账户 A 的余额(例如,它向账户 C 进行转账)。

如果这些交易并行运行,并且交易 2 在交易 1 完成之前开始运行,那么它为账户 A 读取的余额可能与它们顺序运行时不同。这可能导致不正确的执行。

乐观执行解决这个问题的方式是跟踪执行交易 2 时使用的输入,并将其与交易 1 的输出进行比较。如果它们不同,我们就检测到交易 2 在执行时使用了不正确的数据,需要用正确的数据重新执行。

虽然 Monad 并行执行交易,但每笔交易的更新状态是按顺序"合并"的,以检查上述条件。

相关的计算机科学主题包括[乐观并发控制](https://en.wikipedia.org/wiki/Optimistic_concurrency_control) (OCC) 和[软件事务性内存](https://en.wikipedia.org/wiki/Software_transactional_memory) (STM)。

## 乐观执行的影响

在乐观执行的朴素实现中,直到区块中较早的交易完成后才能检测到交易需要重新执行。此时,所有较早交易的状态更新都已合并,因此该交易不可能第二次因乐观执行而失败。

执行交易的过程中有些步骤不依赖于状态。一个例子是签名恢复,这是一项昂贵的计算。当再次执行交易时,这项工作不需要重复。

此外,由于合并失败而重新执行交易时,通常访问的账户和存储不会改变。这些状态仍然缓存在内存中,所以这也是昂贵的工作,不需要重复。

## 进一步的工作

还有其他避免重新执行交易的机会,仍在探索中。
