在看本文前,最好先了解区块链相关概念:比特币,以太坊,钱包,智能合约,秘钥等
相信你和我一样,刚开始看这个标题的时候有点懵逼,这讲的啥意思呀?后来我查阅了许多资料以及他人的分析,这才有点理解其中的意思,下面我来说说我是怎么理解的。首先,我把这个标题分解成3个:应用程序、确定性、并行执行,分解后就明了了,我知道应用程序是什么,但是不知道它说的确定性和并行执行是什么意思。于是,就需要查询确定性和并行执行,得出的结果是:
并行执行:同时独立地安装和使用程序集的多个版本的能力。并行执行可以应用于应用程序和组件以及 .NET Framework。允许多个程序集在同一台计算机上共存和同时执行,对于支持公共语言运行库中可靠的版本控制至关重要。--百度百科
简单的说就是,多个程序可以同时执行。
确定性并行执行: 由于执行个体之间的同步、竞争和干扰,并行程序的执行存在着不确定性问题,即程序在相同输入下多次执行可能得到不同的结果。不确定性给并行程序在开发、调试、测试、容错和安全等方面都带来了挑战,严重降低了并行程序的可靠性,阻碍了并行程序的发展。确定性并行技术通过控制并行程序执行个体间的同步、竞争和干扰,使程序的执行结果仅依赖于输入。确定性并行技术能够从根本上解决了目前并行程序存在的诸多问题,提升了并行程序的可靠性,给并行程序的发展带来了新的机遇。
结合并行执行可以这样理解,要使多个程序同时执行,并且能更稳更安全的执行,就需要用到确定性并行技术,理解了吗?
EOS中也运用了这样的技术,在白皮书中是这样说的:
通常一个账户方一条消息到另外一个账户,并不是立即就能收到的,其中需要一定的时间,这个时间就叫做延迟时间。EOS不希望有这个延迟时间存在,他希望能够在一个区块内来回交换消息。他是怎么做的呢? EOS将区块分成了几个循环,循环又分成了多个线程,每个线程包含一个交易列表,每个交易包含一组要传递的消息。这个结构可以看成为一棵树,在这个树中交替的层被顺序的并行的处理,我们看下面这张图
在一个循环中生成的交易可以在后续的任何一个循环或者区块中被发送。 区块生产者会持续不断的向区块中添加循环直到最大的墙上时间到了或者没有更多的新交易要发送。
可以对一个区块使用静态分析来验证同一个循环内不存在两个线程包含同一帐户下对交易的变更。 只要保持不变一个区块就可以并行的运行所有的线程。
有点绕,其实可以这样理解,以上做法都是为了让账户和账户之间通信更快更及时。
只读消息的处理,EOS对于无需更新状态的消息处理是可以并行的,只要特定的只读消息处理程序被包含在特定的循环内的一个或多个线程中就可以。
有时我们需要确保消息自动的被多个账户传递和接收(原子性操作)。 在这种情况下,消息会被放在同一个交易内,账户会被分配到同一个线程,并且消息被顺序的添加。 这种情况对性能是不理想的,当用户使用涉及到“账单”时,他们将在交易内以账户唯一索引被列入其中(为了确保交易成功)。
但是,基于性能和成本原因最好减少涉及两个或多个重度帐户的原子性操作。
1.大规模的区块链技术组件应该是模块化的
2.EOS允许完整节点选择要运行的任何程序子集
1.EOS系统不能强制阻止区块生成这向其他账户发送的任何消息 2.每个区块生产者都可以根据处理交易所需的计算复杂性和时间做出自己的主观预测。 3.在网络层面上,所有的交易都会收取一个固定的计算带宽成本,区块生产者也可以使用自己的算法来测量资源的使用。 4.一般来说,只要一个区块生产者认为一个交易是有效的,并且所消耗的资源是可控的,那么所有的其他区块生产者也会接受,但是交易可能需要最长1分钟才能找到生产者。为什么是一分钟,因为一分钟内交易可以在21个区块生产者之间流转一遍,如果还没有找到,那么这个交易就不会被打包了。 5.这种对计算、资源成本的主观评估将使区块链不必精确地去度量运行一个任务需要多长时间。有了这个设计,就不需要精确地数指令,这将极大地增加优化的机会,而不会打破“共识”。
配合学习笔记系列文章一起读会更好理解哦
本文为林明潭原创文章,转载无需和我联系,但请注明来自林明潭的博客blog.umaske.com
最新评论