http://www.7klian.com

代码层阐明以太坊2.0的致命缺陷

<code>public class Bank{ //银行余额 private int balance; public Bank(int balance){ this.balance = balance; } //用户提款 public void withdraw (int value) { try { Thread.sleep(300); //0.3秒的模仿时延 } catch (InterruptedException e) { e.printStackTrace(); } this.balance -= value; } //查询当前余额 public int getBalance(){ return this.balance; } } </code>

接下来就是用来演示的主措施:

所觉得了制止这种环境,我们必需要担保这个寄存器的状态在多线程运行中是同步的。固然它们都是共享同一块数据资源,可是必需要有一个先来后到。就拿上述环境来说,我们必需要担保线程1操纵寄存器的时候,其他线程无法会见。只有当线程1竣事今后,线程3才可以举办操纵。这样一来,每条线程所读取的寄存器数据就是同步的。

继比特币减半今后,币圈又有一个大事件在酝酿,那就是以太坊要进级了。在开始聊这个以太坊2.0之前,我先来问一个问题。

所以我们可以看到,固然每条线程都是独立的,可是整个线程的调治是中心化的。CPU就比如是一个大脑。它得给差异的线程举办公道的资源分派,布置执行的先后顺序,这样才气担保数据的同步。所以这个大脑必需得知道哪些寄存器上了锁,哪些线程在举办会见,哪些线程在期待。也就说它具备一个“上帝视角”可以及时监测每一条线程,以及每一个寄存器的状态。

那为什么会产生这种环境呢?这是由于计较机CPU的非凡架构所抉择的。计较机的任何一条指令都需要知道它的操纵工具是谁,值是几多,不然这条指令就没有意义。那这个操纵工具去那边找?CPU里有一个叫做寄存器的元件专门认真存储这个信息。任何一条指令都需要会见这个寄存器,获取它操纵工具的值,指令才气完整地执行。好比下图中的AX就是CPU的一个寄存器。内里可存一个16位的二进制数。

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。