由于延迟块链的原因,如何处理异步操作?块链在高并发性下的表现如何?如何处理互斥变量?
发布于 2016-08-24 04:29:41
区块链本身实际上是单线程的:事务是一个接一个地执行的,如果下一个事务引用它,那么先前事务的状态已经被更改。因此,例如,如果您想为一系列记录分配一个递增的ID,您可以确信每个ID最终只分配给一个记录。
问题是,当您发送一个事务时,您不仅不知道它相对于其他事务的发生顺序是什么,而且事后也不知道,因为刚刚处理它的块可能是孤立的,并被一个以不同顺序接收事务的块所替代。因此,在我们的ID示例中,您可以通过从Javascript代码发送一个事务来创建一个记录,查看它得到一个ID,然后稍后返回并发现您认为分配给您的记录的ID现在属于另一个记录。
其结果是,需要严格排序的事情需要在区块链中进行管理,而区块链最终总是与其本身一致的,而且对于外部系统,您不能假设立即保持一致。
发布于 2016-08-24 04:22:36
区块链上没有并发性。事务由创建块的节点根据该节点接收事务的顺序进行排序。
因此,在类似于竞赛条件的情况下,例如令牌交换,通过在阻塞时间内下多个订单,并根据状态值(如在前一个块上看到的价格),许多事务可能就会失效,因为该价格是在TX池中先到先得的基础上进行调整的。
https://ethereum.stackexchange.com/questions/8261
复制相似问题