CN115827204A - 事务调度方法、事务执行方法、装置和计算机设备 - Google Patents
事务调度方法、事务执行方法、装置和计算机设备 Download PDFInfo
- Publication number
- CN115827204A CN115827204A CN202211721906.3A CN202211721906A CN115827204A CN 115827204 A CN115827204 A CN 115827204A CN 202211721906 A CN202211721906 A CN 202211721906A CN 115827204 A CN115827204 A CN 115827204A
- Authority
- CN
- China
- Prior art keywords
- transaction
- instruction
- transactions
- executed
- execution
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Advance Control (AREA)
Abstract
本申请涉及一种事务调度方法、装置、计算机设备和存储介质。所述方法包括:获取区块的事务依赖关系图和自由事务集,根据事务依赖关系图和自由事务集,选取出多个依赖事务和多个自由事务,将依赖事务和自由事务添加至事务表中,发送事务加载信号至多个事务执行模块,以使事务执行模块加载事务、并并行执行,当接收到事务执行模块发送的加载完成信号时,从事务依赖关系图和自由事务集中选择新事务添加至事务表中,并更新事务依赖关系图、事务表和预设的调度表,直至区块中所有事务执行完毕。采用本方法能提高事务执行效率。本申请还提供一种事务执行方法、装置、计算机设备和存储介质。采用该方法能避免重复执行指令解码过程,提高事务执行效率。
Description
技术领域
本申请涉及区块链技术领域,特别是涉及一种事务调度方法、装置、计算机设备、计算机可读存储介质和计算机程序产品,以及事务执行方法、装置、计算机设备、计算机可读存储介质和计算机程序产品。
背景技术
智能合约是一个用代码形式化的计算机协议,能够实现各种区块链场景下的自定义的功能,例如金融服务、物联网设备、供应链和众包平台。
以太坊是目前最大的支持智能合约的无许可区块链系统,其本质上是一个基于事务的状态机,其中任意节点都可以参与其中维护整个区块链的状态。以太坊使用广播共识执行三阶段模型,具体在执行阶段:其他节点会将广播的新区块捕获依次执行其内部的事务并验证其结果是否正确。上述执行特性限制了以太坊中智能合约的整体执行速度。该执行阶段要求,只有当前区块执行完并成功通过验证之后才能继续执行下一个区块,新生成的区块必须基于旧区块的区块链状态进行状态更新,这种链式的结构从本质上决定了事务执行处于区块链系统状态更新(即系统吞吐)的关键路径上。
然而,由于事务之间存在广泛的依赖关系,即使是执行相同的事务队列,但不一样的执行顺序会导致不一致的执行结果。为了统一地完成区块验证,所有节点都默认以区块中的事务顺序串行执行事务。由此可见,上述事务顺序执行的特点无法充分利用多核处理器并行的计算资源,影响事务执行效率。
发明内容
基于此,有必要针对上述技术问题,提供一种能够提高事务执行效率的事务调度方法、装置、计算机设备、计算机可读存储介质和计算机程序产品,以及事务执行方法、装置、计算机设备、计算机可读存储介质和计算机程序产品。
第一方面,本申请提供了一种事务调度方法,应用于事务调度模块。方法包括:
获取区块的事务依赖关系图和自由事务集,事务依赖关系图包括多个存在依赖关系的依赖事务,自由事务集包括不存在依赖关系的自由事务;
根据事务依赖关系图和自由事务集,选取出多个依赖事务和多个自由事务;
将依赖事务和自由事务添加至事务表中,发送事务加载信号至多个事务执行模块,以使事务执行模块加载事务、并并行执行事务;
当接收到事务执行模块发送的加载完成信号时,从事务依赖关系图和自由事务集中选择新事务添加至事务表中,并更新事务依赖关系图、事务表和预设的调度表,直至检测到区块中所有事务执行完毕。
在其中一个实施例中,分别根据事务依赖关系图和自由事务集,选取出多个依赖事务和多个自由事务包括:
根据事务依赖关系图,选取第一数量的入度为零的依赖事务,以及根据自由事务集,选取第二数量的自由事务,第一数量和第二数量基于事务执行模块的数量确定。
在其中一个实施例中,更新事务依赖关系图和事务表包括:
根据选取出的新事务,删除事务依赖关系图中对应的事务节点;
根据新事务和当前正在执行的事务的冗余依赖关系,更新事务依赖关系图和事务表中各事务的权重,以及事务表中事务的同步锁状态。
在其中一个实施例中,预设的调度表包括各事务执行模块的依赖表项和冗余表项,依赖表项为表征事务表项与当前事务执行模块执行的事务是否存在依赖关系的二进制数值,冗余表项为表征事务表项与当前事务执行模块执行的事务是否存在冗余关系的二进制数值;
更新预设的调度表包括:
将除目标事务执行模块之外的事务执行模块的依赖表项作同或运算,得到同或运算结果,目标事务执行模块为待加载事务的事务执行模块;
将同或运算结果与目标事务执行模块的冗余表项作与运算,得到与运算结果;
根据与运算结果,从更新后的事务表中筛选出目标事务执行模块的下一待执行事务;
根据目标事务执行模块的下一执行事务,更新预设的调度表。
第二方面,本申请提供了一种事务调度装置。装置包括:
数据获取模块,用于获取区块的事务依赖关系图和自由事务集,事务依赖关系图包括多个存在依赖关系的依赖事务,自由事务集包括不存在依赖关系的自由事务;
事务选择模块,用于根据事务依赖关系图和自由事务集,选取出多个依赖事务和多个自由事务;
事务添加模块,用于将依赖事务和自由事务添加至事务表中,发送事务加载信号至多个事务执行模块,以使事务执行模块加载事务、并并行执行事务;
数据更新模块,用于当接收到事务执行模块发送的加载完成信号时,从事务依赖关系图和自由事务集中选择新事务添加至事务表中,并更新事务依赖关系图、事务表和预设的调度表,直至检测到区块中所有事务执行完毕。
第三方面,本申请还提供了一种计算机设备。所述计算机设备包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现上述事务调度方法中的步骤。
第四方面,本申请还提供了一种计算机可读存储介质。所述计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述事务调度方法中的步骤。
第五方面,本申请还提供了一种计算机程序产品。所述计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现上述事务调度方法中的步骤。
上述事务调度方法、装置、计算机设备、存储介质和计算机程序产品,区别于传统的以区块中事务顺序串行执行事务的方式,而是以区块中事务依赖关系图和自由事务集为依据,选取出多个依赖事务和多个自由事务,再将依赖事务和自由事务分配至多个事务执行模块进行并行执行,当接收到事务执行模块发送的加载完成信号时,从事务依赖关系图和自由事务集中选择新事务添加至事务表中,并更新事务依赖关系图、事务表和预设的调度表,直至检测到区块中所有事务执行完毕。上述过程,充分利用了事务之间的依赖关系,选取出多个依赖事务和多个自由事务,再将依赖事务和自由事务分配至多个事务执行模块进行并行执行,实现了区块中事务的异步执行调度,从而充分利用了多核处理器并行的计算资源,加快区块的整体执行速度,提高了事务执行效率。
第六方面,本申请提供了一种事务执行方法,应用于事务执行模块,方法包括:
接收事务调度模块发送的事务加载信号,事务加载信号携带事务标识信息;
根据事务标识信息,从事务表中选择对应的目标事务,将目标事务上锁加载,并发送加载完成信号至事务调度模块,事务表为区块链中的事务调度模块执行上述事务调度方法调度得到;
提取目标事务中当前待执行指令的指令地址;
若判定当前待执行指令的指令地址存在于预设的字节码缓存、且目标事务的当前剩余开销不小于预设的字节码缓存所记录的指令开销总和,则以当前待执行指令所在的缓存行为起点,依次获取各缓存行中指令所需的操作数,根据操作数执行各缓存行中指令的字节码;
若预设的字节码缓存中的指令执行完成,则返回提取目标事务中当前待执行指令的指令5地址的步骤,直至目标事务中所有指令执行完毕;
其中,预设的字节码缓存中每条缓存行记录有不存在依赖关系的指令的字节码。
在其中一个实施例中,事务执行模块包括多个与指令功能对应的功能单元;
根据操作数执行各缓存行中指令的字节码包括:
按照智能合约指令集中指令的指令功能,将各缓存行中的指令划分为多个类别;0将各类别的指令以及指令所需的操作数分配至与指令功能对应的功能单元并行执行。
在其中一个实施例中,方法还包括:
若目标事务中当前待执行指令的指令地址不存在于预设的字节码缓存,则对当前待执行指令进行解码,并根据当前待执行指令与预设的字节码缓存中的指令的依赖关系,将解码后
的当前待执行指令插入预设的字节码缓存中,更新预设的字节码缓存的指令开销;5若目标事务的当前剩余开销不小于更新后的预设的字节码缓存所记录的指令开销总和,
则以当前待执行指令所在的缓存行为起点,依次获取各缓存行中指令所需的操作数,根据操作数执行各缓存行中指令的字节码,若预设的字节码缓存中的指令执行完成,则返回提取目标事务中当前待执行指令的指令地址的步骤,直至目标事务中所有指令执行完毕。
第七方面,本申请还提供了一种事务执行装置。装置包括:0信号接收模块,用于接收事务调度模块发送的事务加载信号,事务加载信号携带事务标
识信息;
事务加载模块,用于根据事务标识信息,从事务表中选择对应的目标事务,将目标事务上锁加载,并发送加载完成信号至事务调度模块,事务表为区块链中的事务调度模块执行上
述事务调度方法调度得到;
5指令地址提取模块,用于提取目标事务中当前待执行指令的指令地址;
目标事务执行模块,用于若判定当前待执行指令的指令地址存在于预设的字节码缓存、且目标事务的当前剩余开销不小于预设的字节码缓存所记录的指令开销总和,则以当前待执行指令所在的缓存行为起点,依次获取各所述缓存行中指令所需的操作数,根据所述操作数执行各缓存行中指令的字节码,若预设的字节码缓存中的指令执行完成,则返回所述提取目标事务中当前待执行指令的指令地址的步骤,直至所述目标事务中所有指令执行完毕;
其中,预设的字节码缓存中每条缓存行记录有不存在依赖关系的指令。
第八方面,本申请还提供了一种计算机设备。所述计算机设备包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现上述事务执行方法中的步骤。
第九方面,本申请还提供了一种计算机可读存储介质。所述计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述事务调度方法中的步骤。
第十方面,本申请还提供了一种计算机程序产品。所述计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现上述事务执行方法中的步骤。
上述事务执行方法、装置、计算机设备、存储介质和计算机程序产品,区别于传统的按照事务中执行指令的顺序执行事务的方式,而是将目标事务中当前待执行指令的指令地址与预设的字节码缓存中的地址标识进行比较,由于预设的字节码缓存中每条缓存行记录的是不存在依赖关系的指令,若判定当前待执行指令的指令地址存在于预设的字节码缓存、且目标事务的当前剩余开销不小于预设的字节码缓存所记录的指令开销总和,则无需对当前待执行指令解码,以当前待执行指令所在的缓存行为起点,依次获取各所述缓存行中指令所需的操作数,根据所述操作数执行各缓存行中指令的字节码,若预设的字节码缓存中的指令执行完成,则返回提取目标事务中当前待执行指令的指令地址的步骤,直至目标事务中所有指令执行完毕直至目标事务中所有待执行指令执行完成。上述过程,充分利用了事务之间的冗余关系,能够避免重复执行指令的解码过程,以此达到去除事务之间冗余的目的,从而缩短事务执行时间,提高了事务执行效率。
附图说明
图1为一个实施例中事务调度方法或事务执行方法的应用环境图;
图2为一个实施例中事务调度方法的流程示意图;
图3为一个实施例中异步并行调度过程框架图;
图4为一个实施例异步执行调度过程示意图;
图5为另一个实施例中事务调度方法的流程示意图;
图6为一个实施例中更新调度表步骤的流程示意图;
图7为一个实施例中事务执行方法的流程示意图;
图8为一个实施例中优化事务冗余关系的示意图;
图9为一个实施例中事务调度装置的结构框图;
图10为一个实施例中事务执行装置的结构框图;
图11为一个实施例中计算机设备的内部结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
本申请实施例提供的事务调度方法,可以应用于如图1所示的应用环境中。其中,终端102通过网络与区块链104进行通信,终端102上部署有事务调度模块106和事务执行模块108。可以理解的是,事务调度模块106和事务执行模块108也可以分别存在于不同设备上,二者通过网络进行通信。本实施例中,为了减少设备交互的开销,提升速度,也可以将事务调度模块和事务执行模块集成于同一终端为例进行说明,二者通过硬件结构进行通信,具体可根据实际情况而定,在此不做限定。具体的,可以是终端102获取当前区块中所有事务的依赖关系,根据依赖关系,对区块中所有事务进行划分,构建事务依赖关系图和自由事务列表,并上链存证。其中,事务依赖关系图包括多个存在依赖关系的依赖事务,自由事务集包括不存在依赖关系的自由事务。当终端102接收到事务调度消息时,发送事务调度信号至事务调度模块106,事务调度模块106响应事务调度信号,获取区块的事务依赖关系图和自由事务集,然后,分别从事务依赖关系图中和自由事务集中选取出多个依赖事务和多个自由事务,再将依赖事务和自由事务添加至事务表中,发送事务加载信号至多个事务执行模块108,以使事务执行模块108加载事务、并并行执行,当接收到事务执行模块108发送的加载完成信号时,从事务依赖关系图和自由事务集中选择新事务添加至事务表中,并更新事务依赖关系图、事务表和预设的调度表,直至检测到区块中所有事务执行完毕,至此,完成事务调度过程。其中,终端102可以但不限于是各种个人计算机、笔记本电脑、智能手机、平板电脑、物联网设备和便携式可穿戴设备,物联网设备可为智能音箱、智能电视、智能空调、智能车载设备等。便携式可穿戴设备可为智能手表、智能手环、头戴设备等。
在一个实施例中,如图2所示,提供了一种事务调度方法,以该方法应用于图1中的终端为例,具体以应用在终端102中事务调度模块106为例进行说明,包括以下步骤:
步骤S100,获取区块的事务依赖关系图和自由事务集,事务依赖关系图包括多个存在依赖关系的依赖事务,自由事务集包括不存在依赖关系的自由事务。
事务依赖关系图为包括多个存在依赖关系的依赖事务节点(也可称为依赖事务)的关系图。事务依赖关系图的结构可如图3所示。事务依赖关系图中的每个节点为一个键值对(key-value pair),其中,key表示当前事务号(Tn),value是一个由事务调用的智能合约(SCn)和具体调用函数(fn为智能合约函数标识符,合约执行的第一步会比较32位字节码来确定入口函数,f为标识)组成的二元组。权值字段(Value,图中为V),表示当前事务执行的冗余度。图中的每条有向边表示一个依赖关系,每条边的含义为边终点的事务依赖于边起点的事务。自由事务集则为包括多个不存在依赖关系的自由事务的数据结构,自由事务为不依赖任何其他事务,可独立执行的事务。在实际应用中,事务之间的依赖关系在区块产生的时候就已生成。因此,可以是本地节点100预先获取当前区块中所有事务的依赖关系,根据依赖关系,对区块中所有事务进行划分,构建事务依赖关系图和自由事务列表,并上链存证。举例说明,若区块中事务总数为10个,其中0~6号事务(T0~T5)存在相关的依赖关系,a、b、c三个事务与其他任何事务都没有依赖关系,则将事务a、b、c划分到自由事务列表中;调用了相同智能合约的节点任务则认为其具有共同的冗余关系(可称为冗余项Re),若T0,T2,T4都调用了相同的智能合约SC1,其对应的事务节点的冗余度Value就为3,其他节点冗余度计算规则与此相同,以此方式,构建事务依赖关系图。当事务调度模块102接收到事务调度信号时,便直接获取区块的事务依赖关系图和自由事务集。本实施例中,事务调度模块可以是CPU(Central Processing Unit,中央处理器)。
步骤S200,根据事务依赖关系图和自由事务集,选取出多个依赖事务和多个自由事务。
承接上一实施例,当获取区块的事务依赖关系图和自由事务集之后,事务调度模块便可分别从事务依赖关系图中和自由事务集中选取出多个依赖事务和多个自由事务,以便于后续的调度事务。
步骤S300,将多个依赖事务和多个自由事务添加至事务表中,发送事务加载信号至多个事务执行模块,以使事务执行模块加载事务、并并行执行事务。
事务表包括事务状态L和冗余度V两个维度的数据。其中,事务表中“L”表示同步锁标志,1表示当前事务表项上锁,其他事务执行模块不可加载此事务,“0”表示未上锁,事务可以被正常加载,默认为0;“V”表示事务的冗余权重即冗余度,对应事务依赖关系图中每个节点的权重。当选取出多个依赖事务和多个自由事务后,可将多个依赖事务和多个自由事务加载添加至事务表中,同时,发送事务加载信号至多个事务执行模块,以使各事务执行模块选择加载相应事务、并并行执行已加载的事务。可以理解的是,在将事务加载至事务表之初,可初始化事务表为空。
步骤S400,当接收到事务执行模块发送的加载完成信号时,从事务依赖关系图和自由事务集中选择新事务添加至事务表中,并更新事务依赖关系图、事务表和预设的调度表,直至检测到区块中所有事务执行完毕。
调度表表征各事务执行模块的调度状态。具体的,调度表包括各事务执行模块的冗余表项和依赖表项。冗余表项为表征事务表项与当前事务执行模块执行的事务是否存在冗余关系的二进制数值,即可以表示事务表中与当前事务执行模块正在执行的事务有冗余关系的表项。本实施例中,冗余表项简称冗余项,以“Re”表示。若事务调用了相同的智能合约则认为其具有共同的冗余关系。初始时调度表所有表项都为0,表项数量与事务执行模块的数量一致,每个Re由2N-1位二进制组成,分别对应事务表中每个表项,若某个表项对应位置为1,则表示与当前事务执行模块正在执行的事务有冗余关系,若对应位置为0表示与当前事务执行模块正在执行的事务无冗余关系。
依赖表项为表征事务表项与当前事务执行模块执行的事务是否存在依赖关系的二进制数值,即可以表示事务表中与当前事务执行模块正在执行的事务有依赖关系的表项。本实施例中,依赖表项简称依赖项,以“De”表示。每个De由2N-1位二进制组成,分别对应事务表中每个表项,若对应位置为1,表示与当前事务执行模块正在执行的事务有依赖关系,若对应位置为0,表示与当前事务执行模块正在执行的事务无依赖关系。
具体实施时,当事务调度模块接收到事务执行模块发送的“加载完成”信号时,表征原事务表中的事务已被加载完成,需要填充新的事务,此时,事务调度模块则从事务依赖关系图和自由事务集中选择新事务添加至事务表中,此时,事务依赖关系图中的节点减少了事务,事务表中新增了事务,调度表中事务执行模块的调度状态也发生了变化,因此,可根据事务的调度情况,更新事务依赖关系图、事务表和预设的调度表。当事务调度模块再次接收“加载完成”信号时,则再次从事务依赖关系图和自由事务集中选择新事务添加至事务表中,并更新事务依赖关系图、事务表和预设的调度表,如此,重复上述过程,直至检测到区块中所有事务均被加载完成并成功执行。具体的异步执行调度过程可如图4所示。
上述事务调度方法中,区别于传统的以区块中事务顺序串行执行事务的方式,而是以区块中事务依赖关系图和自由事务集为依据,选取出多个依赖事务和多个自由事务,再将依赖事务和自由事务分配至多个事务执行模块进行并行执行,当接收到事务执行模块发送的加载完成信号时,从事务依赖关系图和自由事务集中选择新事务添加至事务表中,并更新事务依赖关系图、事务表和预设的调度表,直至检测到区块中所有事务执行完毕。上述过程,充分利用了事务之间的依赖关系,选取出多个依赖事务和多个自由事务,再将依赖事务和自由事务分配至多个事务执行模块进行并行执行,实现了区块中事务的异步执行调度,从而充分利用了多核处理器并行的计算资源,加快区块的整体执行速度,提高了事务执行效率。
如图5所示,在其中一个实施例中,步骤S200包括:步骤S220,根据事务依赖关系图,选取第一数量的入度为零的依赖事务,以及根据自由事务集,选取第二数量的自由事务,第一数量和第二数量基于事务执行模块的数量确定。
本实施例中,事务调度模块在选取依赖事务和自由事务时,可以是根据事务执行模块的数量而选择。具体的,可以是若事务执行模块的数量为N,则选取的事务总数量可定为2N-1,可以是从事务依赖关系图中尽量选取N个入度为零的依赖事务,然后,再从自由事务列表中选取N-1个自由事务,以完成2N-1个事务的选取。若当前选取出的事务的数量未达到2N-1,则可以继续将选取出的事务加载到事务表中,以等待事务执行模块的加载执行。本实施例中,通过事务执行模块的数量,确定添加至事务表中的数量,能够确保时刻有事务执行模块。
在其中一个实施例中,更新事务依赖关系图和事务表包括:根据选取出的新事务,删除事务依赖关系图中对应的事务节点,根据新事务和当前正在执行的事务的冗余依赖关系,更新事务依赖关系图和事务表中各事务的权重,以及事务表中事务的同步锁状态。
具体实施时,更新事务依赖关系图可以是根据选取出的新事务,删除事务依赖关系图中对应的事务节点,并根据新事务和当前正在执行的事务的冗余依赖关系,更新事务依赖关系图和事务表中各事务的权重,即更新各事务的冗余关系,同时,更新事务表中各事务的同步锁状态。
举例说明,若事务执行模块的个数为2,事务调度模块以CPU为例。
步骤1-1.如图3所示,初始状态事务表为空,事务依赖关系图中冗余关系为0的事务为T0和T1,自由事务为Ta、Tb和Tc,事务调度模块分别选择T0、T1和Ta这3个事务节点作为候选事务加入事务表,将选取的事务加入事务表后,从事务依赖关系图中对应删除该事务节点,并更新事务节点的权重。
步骤1-2.事务执行模块在候选事务中选择未上锁且权重最大的最佳事务,给选择的最佳事务上锁后加载并执行,加载完成后发送“加载完成”信号给CPU,首次选择T0和T1这两个事务执行。
步骤1-3.CPU收到事务执行模块发送的“加载完成”信号后,将选择新的事务填充至事务表中,此过程同步骤1-1一样,因为T0、T1已经从事务依赖关系图中移出,所以此时T2、T3、T4三个事务节点的入度为0,可将其中T2、T3事务填充至事务表。并根据新事务和正在执行的事务之间的冗余关系和依赖关系更新事务依赖关系图表中各事务节点的权重。当下一次“加载完成”信号到来时,返回步骤1-3,继续执行调度过程,直至所有的事务均完成调度,并完成执行。
本实施例中,根据新事务和正在执行的事务之间的冗余关系和依赖关系,及时更新事务依赖关系图和事务表,能够保证事务调度模块做出准确的事务调度。
如图6所示,在其中一个实施例中,预设的调度表包括各事务执行模块的依赖表项和冗余表项;
更新预设的调度表包括:
步骤S420,将除目标事务执行模块之外的事务执行模块的依赖表项作同或运算,得到同或运算结果,目标事务执行模块为待加载事务的事务执行模块。
步骤S440,将同或运算结果与目标事务执行模块的冗余表项作与运算,得到与运算结果。
步骤S460,根据与运算结果,从更新后的事务表中筛选出目标事务执行模块的下一待执行事务。
步骤S480,根据目标事务执行模块的下一执行事务,更新预设的调度表。
具体实施时,可以是当检测到有目标事务执行模块执行完已加载的任务需要加载新的事务时,则将除目标节点之外的所有事务执行模块的依赖表项作同或运算,得到同或运算结果,以筛选出与当前除目标事务执行模块之外的其他事务执行模块正在执行的事务不存在依赖关系的候选事务,然后,为了进一步筛选出最为合适的事务作为目标事务执行模块的下一执行事务,可再将同或运算结果与目标事务执行模块的冗余表项作与运算,得到与运算结果,根据与运算结果,从更新后的事务表中筛选出与自身节点存在冗余关系的事务,作为目标事务执行模块的下一实行事务,再将目标事务执行模块的下一执行事务更新至调度表。
承接上一举例,本实施例中,事务执行模块以PU(Processing Unit,处理器)为例,设定事务执行模块的个数为2,分别为PU0和PU1。如图3所示,此时事务执行模块PU1正在执行事务T1,目标事务执行模块PU0中的事务T0已经执行完成需要加载新的事务,而PU0在执行事务T0时的依赖表项为000,此时,可将调度表中剩余的事务执行模块PU1的依赖表项“001”与“000”作同或运算可以得到“110”,(本实施例列举的事务执行模块为2个,若有更多的事务执行模块,则此处的同或计算参数为其他所有事务执行模块的依赖表项),将同或运算结果对应事务表中每个表项,“110”对应到事务表,则表示事务表中的第1、2个表项为1,第3个表项为“0”,则认为事务表中第1、2个表项中的事务即T2和T3与当前其他事务执行模块事务都不存在依赖关系,可以作为PU0的事务候选项。然后,再将同或运算结果“110”与目标事务执行模块PU0的冗余表项Re作与运算:“110&101”得到“100”,“100”表示事务表中第1个表项中的事务即T2可以作为PU0下一个执行事务,此时调度完成,根据上述确定的PU0的下一执行事务T2更新调度表,然后,将事务T2对应的事务状态L上锁(即标记为1),并发送事务加载信号至PU0,以使PU0加载执行对应的事务T2。
本实施例中,根据事务执行模块的冗余表项和依赖表项进行运算,能够筛选出更为合适的与其他事务执行模块的事务不存在依赖关系的事务,作为目标事务执行模块的下一执行事务,保证事务调度的有序进行。
本申请实施例还提供了一种事务执行方法,同样可以应用于如图1所示的应用环境中。具体的,可以是事务调度模块106按照上述事务调度方法完成当前轮的事务调度,确定当前的事务表,发送携带事务标识信息的事务加载信号至多个事务执行模块108,事务执行模块108接收相应的事务加载信号,根据事务加载信号中携带的事务标识信息,从事务表中选择对应的目标事务,然后,将目标事务上锁加载,并发送加载完成信号至事务调度模块106,当事务执行模块108判定目标事务中当前待执行指令的指令地址存在于预设的字节码缓存中、且目标事务的当前剩余开销不小于当前待执行指令的开销之和,则读取当前待执行指令所需的操作数,根据操作数并行执行当前待执行指令,返回判定目标事务中当前待执行指令的指令地址与预设的字节码缓存中的地址标识是否一致的步骤,继续事务执行过程,直至目标事务中所有待执行指令执行完成。
在一个实施例中,如图7所示,提供了一种事务执行方法,以该方法应用于图1中终端102为例,具体以应用于终端102的事务执行模块108为例进行说明,包括以下步骤:
步骤S500,接收事务调度模块发送的事务加载信号,事务加载信号携带事务标识信息。
事务标识信息包括事务的编号或事务名称,本实施例中,事务标识信息以事务的编号为例。可以是事务调度模块102按照上述事务调度方法将选取出的事务添加至事务表中,并将事务表中的事务分配至不同的事务执行模块,完成本轮事务调度后,发送携带事务编号的事务加载信号至不同的事务执行模块。事务执行模块接收相应的事务加载信号。
步骤S600,根据事务标识信息,从事务表中选择对应的目标事务,将目标事务上锁加载,并发送加载完成信号至事务调度模块,事务表为区块链中的事务调度模块执行上述事务调度方法调度得到。
事务执行模块接收到相应的事务加载信号后,可提取出信号中的事务编号,根据事务编号,从事务表中选择相应的目标事务,并将目标事务上锁加载,发送加载完成信号至事务调度模块。
步骤S700,提取目标事务中当前待执行指令的指令地址。
在实际应用中,一个事务中包括多条待执行指令,每一条待执行指令均有固定的指令地址作为标识。本实施例中,发送加载完成信号至事务调度模块后,然后,开始执行事务,具体的,可以是依据指令计数器提取出目标事务中当前待执行指令的指令地址。可以理解的是,当前待执行指令的数量可以是多条。
步骤S800,若判定当前待执行指令的指令地址存在于预设的字节码缓存、且目标事务的当前剩余开销不小于预设的字节码缓存所记录的指令开销总和,则以当前待执行指令所在的缓存行为起点,依次获取各所述缓存行中指令所需的操作数,根据所述操作数执行各缓存行中指令的字节码。
步骤S900,若预设的字节码缓存中的指令执行完成,则返回步骤S700,直至目标事务中所有待执行指令执行完成。
其中,预设的字节码缓存中每条缓存行记录有不存在依赖关系的指令的字节码。
字节码缓存为一个包括多条缓存行的缓存结构,其中,每个缓存行记录有没有相互依赖关系的指令的字节码,每个缓存行以当前缓存行首个指令的指令地址作为标识,以最后一个执行指令的下一条指令的指令地址作为结束标识,同时还记录了当前缓存行所有指令的总开销(GAS),指令间的依赖关系通过读后写、写后读以及写后写的情况判断,具体的字节码缓存结构可参见图8。GAS在以太坊中相当于事务的总能量,针对一个事务,预先设置有执行该事务所需的GAS,每执行事务中一条指令都会消耗一定量的GAS。
承接上一实施例,当提取出目标事务中当前待执行指令的指令地址后,可以判断当前待执行指令是否命中字节码缓存,即判定当前待执行指令的指令地址是否存在于预设的字节码缓存中,若存在,则判定当前待执行指令命中字节码缓存,即无需解码指令,可直接执行字节码缓存中的字节码,以完成指令执行。此时,可判定目标事务的当前剩余开销不小于预设的字节码缓存所记录的指令开销总和,若目标事务的当前剩余开销不小于预设的字节码缓存所记录的指令开销总和,则可以当前待执行指令所在的缓存行为起点(记为首条缓存行),依次获取各缓存行中指令所需的操作数,然后,根据该操作数,执行各缓存行中所有的字节码,以完成字节码缓存中的所有指令,具体的,可以是当执行完首条缓存行的所有指令后,可根据首条缓存行中的结束地址,找到下一个待执行的缓存行(记为下一缓存行),同样的,获取下一缓存行中指令所需的操作数,根据该操作数,执行下一缓存行中所有的字节码,以完成下一缓存行中的所有指令,以此类推,直至预设的字节码缓存中的指令执行完成,指令执行完毕,并行写回数据,写回的顺序在指令执行时可以得到。然后,重复步骤S700,直到目标事务所有指令执行完成。
若目标事务的当前剩余开销小于预设的字节码缓存所记录的指令开销总和,则结束当前的目标事务的执行过程。因为冗余的事务是调用了相同的智能合约,智能合约在编码之后字节码都是固定的,上述过程中,若当前待执行指令命中了字节码缓存中的地址,则直接根据缓存中的字节码执行对应的指令,避免了调用相同的智能合约的冗余的事务的指令的重复解码,消除了事务间的冗余。
上述事务执行方法中,区别于传统的按照事务中执行指令的顺序执行事务的方式,而是将目标事务中当前待执行指令的指令地址与预设的字节码缓存中的地址标识进行比较,由于预设的字节码缓存中每条缓存行记录的是不存在依赖关系的指令,若判定当前待执行指令的指令地址存在于预设的字节码缓存、且目标事务的当前剩余开销不小于预设的字节码缓存所记录的指令开销总和,则无需对当前待执行指令解码,以当前待执行指令所在的缓存行为起点,依次获取各所述缓存行中指令所需的操作数,根据所述操作数执行各缓存行中指令的字节码,若预设的字节码缓存中的指令执行完成,返回提取目标事务中当前待执行指令的指令地址的步骤,直至目标事务中所有待执行指令执行完成。上述过程,充分利用了事务之间的冗余关系,能够避免重复执行指令的解码过程,以此达到去除事务之间冗余的目的,从而缩短事务执行时间,提高了事务执行效率。
在其中一个实施例中,事务执行模块包括多个与指令功能对应的功能单元;
根据操作数执行目标缓存行中各指令的字节码包括:按照智能合约指令集中指令的指令功能,将各缓存行中的指令划分为多个类别,将各类别的指令以及指令所需的操作数分配至与指令功能对应的功能单元并行执行。
在实际应用中,功能单元的数量与每个缓存行的最大指令数相等。具体的,可依照智能合约集所有指令所包含的指令功能,将缓存行中的指令划分为不同类别,每种类别交给对应的一种功能单元去执行,即将每种类别的指令和指令对应所需的操作数,分配至相应的功能单元,以使功能单元并行执行指令,如此,可很大程度上缩短指令执行的时间,提高事务执行的效率。
在其中一个实施例中,方法还包括:
步骤S920,若目标事务中当前待执行指令的指令地址不存在于预设的字节码缓存,则对当前待执行指令进行解码,并根据当前待执行指令与预设的字节码缓存中的指令的依赖关系,将解码后的当前待执行指令插入预设的字节码缓存中,更新预设的字节码缓存的指令开销;
若目标事务的当前剩余开销不小于更新后的预设的字节码缓存所记录的指令开销总和,则以当前待执行指令所在的缓存行为起点,依次获取各缓存行中指令所需的操作数,根据操作数执行各缓存行中指令的字节码,若预设的字节码缓存中的指令执行完成,则返回步骤S700,直至目标事务中所有指令执行完毕。
对当前待执行指令进行解码即指将当前待执行指令转换为字节码,用于以太坊虚拟机执行。在实际应用中,并非所有的当前待执行指令都能在预设的字节码缓存中找到一致的地址标识,若目标事务中当前待执行指令的指令地址不存在于预设的字节码缓存,则对当前待执行指令进行解码,再将解码后得到的字节码插入字节码缓存中,更新预设的字节码缓存的指令开销。再比较当前剩余GAS是否小于更新后的预设的字节码缓存所记录的指令开销总和,若不小于,则按照当前待执行指令命中字节码缓存的情形下执行指令的方式,以当前待执行指令所在的缓存行为起点,依次获取各缓存行中指令所需的操作数,根据操作数执行各缓存行中指令的字节码,若预设的字节码缓存中的指令执行完成,再返回提取目标事务中当前待执行指令的指令地址的步骤,直至目标事务中所有指令执行完毕。
具体的,将解码后得到的字节码插入字节码缓存中可以是:首先判断当前待执行指令是否跟当前缓存行中存放的指令有依赖关系,如果没有依赖关系,则将解码后的字节码插入到当前缓存行,并更新当前缓存行的总GAS,若插入的本条指令是一个分支指令,则将当前所插入分支指令作为本缓存行的结尾,此行插入结束,不能再插入新的指令;若当前待执行指令与缓存行中指令存在依赖关系,则当前缓存行插入结束,不能再被插入新的指令,此时,新建缓存行,将待执行指令解码得到的字节码插入新的空行中;若当前缓存行已满则根据LRU(Least recently used,最近最少使用)算法替换出缓存行。待当前待执行指令的字节码插入成功后,将新插入的指令下一条指令地址作为当前行结尾地址。如图8所示,指令PUSHx80和指令PUSHx40可以在写入阶段同时写入到堆栈中,其指令间没有依赖关系可以放在同一行缓存,缓存行开始地址为i,结束地址为PUSHx40的下一条待执行指令地址i+2;MSTORE指令是从栈顶取出两个元素分别作为偏移量和数据写入到内存,其依赖前两个PUSH指令插入的数据,所以存在依赖关系,需要插入到新的一行,此时第一行缓存行不能再被插入指令缓存,根据此规则本实施例事务执行过程对应的字节码缓存如图6所示。
应该理解的是,虽然如上所述的各实施例所涉及的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,如上所述的各实施例所涉及的流程图中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
基于同样的发明构思,本申请实施例还提供了一种用于实现上述所涉及的事务调度方法的事务调度装置,以及实现上述事务执行方法的事务执行装置。上述装置所提供的解决问题的实现方案与上述方法中所记载的实现方案相似,故下面所提供的一个或多个事务调度装置或事务执行装置实施例中的具体限定可以参见上文中对于事务调度方法或事务执行方法的限定,在此不再赘述。
在一个实施例中,如图9所示,提供了一种事务调度装置。装置包括数据获取模块810、事务选择模块820、事务添加模块830和数据更新模块840,其中:
数据获取模块810,用于获取区块的事务依赖关系图和自由事务集,事务依赖关系图包括多个存在依赖关系的依赖事务,自由事务集包括不存在依赖关系的自由事务。
事务选择模块820,用于根据事务依赖关系图和自由事务集,选取出多个依赖事务和多个自由事务。
事务添加模块830,用于将依赖事务和自由事务添加至事务表中,发送事务加载信号至多个事务执行模块,以使事务执行模块加载事务、并并行执行事务。
数据更新模块840,用于当接收到事务执行模块发送的加载完成信号时,从事务依赖关系图和自由事务集中选择新事务添加至事务表中,并更新事务依赖关系图、事务表和预设的调度表,直至检测到区块中所有事务执行完毕。
上述事务调度装置中,区别于传统的以区块中事务顺序串行执行事务的方式,而是以区块中事务依赖关系图和自由事务集为依据,选取出多个依赖事务和多个自由事务,再将依赖事务和自由事务分配至多个事务执行模块进行并行执行,当接收到事务执行模块发送的加载完成信号时,从事务依赖关系图和自由事务集中选择新事务添加至事务表中,并更新事务依赖关系图、事务表和预设的调度表,直至检测到区块中所有事务执行完毕。上述过程,充分利用了事务之间的依赖关系,选取出多个依赖事务和多个自由事务,再将依赖事务和自由事务分配至多个事务执行模块进行并行执行,实现了区块中事务的异步执行调度,从而充分利用了多核处理器并行的计算资源,加快区块的整体执行速度,提高了事务执行效率。
其中一个实施例中,事务选择模块820还用于根据事务依赖关系图,选取第一数量的入度为零的依赖事务,以及根据自由事务集,选取第二数量的自由事务,第一数量和第二数量基于事务执行模块的数量确定。
在其中一个实施例中,数据更新模块840还用于根据选取出的新事务,删除事务依赖关系图中对应的事务节点,根据新事务和当前正在执行的事务的冗余依赖关系,更新事务依赖关系图和事务表中各事务的权重,以及事务表中事务的同步锁状态。
在其中一个实施例中,预设的调度表包括各事务执行模块的依赖表项和冗余表项;
数据更新模块840还用于将除目标事务执行模块之外的事务执行模块的依赖表项作同或运算,得到同或运算结果,目标事务执行模块为待加载事务的事务执行模块,将同或运算结果与目标事务执行模块的冗余表项作与运算,得到与运算结果,根据与运算结果,从更新后的事务表中筛选出目标事务执行模块的下一待执行事务,根据目标事务执行模块的下一执行事务,更新预设的调度表。
如图10所示,其中一个实施例中,本申请还提供了一种事务执行装置。装置包括:信号接收模块910、事务加载模块920、指令地址提取模块930和目标事务执行模块940,其中:
信号接收模块910,用于接收事务调度模块发送的事务加载信号,事务加载信号携带事务标识信息;
事务加载模块920,用于根据事务标识信息,从事务表中选择对应的目标事务,将目标事务上锁加载,并发送加载完成信号至事务调度模块,事务表为区块链中的事务调度模块执行上述事务调度方法调度得到。
指令地址提取模块930,用于提取目标事务中当前待执行指令的指令地址。
目标事务执行模块940,用于若判定当前待执行指令的指令地址存在于预设的字节码缓存、且目标事务的当前剩余开销不小于预设的字节码缓存所记录的指令开销总和,则以当前待执行指令所在的缓存行为起点,依次获取各所述缓存行中指令所需的操作数,根据所述操作数执行各缓存行中指令的字节码,若预设的字节码缓存中的指令执行完成,则控制指令地址提取模块930执行提取目标事务中当前待执行指令的指令地址的操作,直至目标事务中所有待执行指令执行完成;
其中,预设的字节码缓存中每条缓存行记录有不存在依赖关系的指令。
上述事务执行装置中,区别于传统的按照事务中执行指令的顺序执行事务的方式,而是将目标事务中当前待执行指令的指令地址与预设的字节码缓存中的地址标识进行比较,由于预设的字节码缓存中每条缓存行记录的是不存在依赖关系的指令,若判定当前待执行指令的指令地址存在于预设的字节码缓存、且目标事务的当前剩余开销不小于预设的字节码缓存所记录的指令开销总和,则无需对当前待执行指令解码,以当前待执行指令所在的缓存行为起点,依次获取各所述缓存行中指令所需的操作数,根据所述操作数执行各缓存行中指令的字节码,若预设的字节码缓存中的指令执行完成,返回提取目标事务中当前待执行指令的指令地址的步骤,直至目标事务中所有待执行指令执行完成。上述过程,充分利用了事务之间的冗余关系,能够避免重复执行指令的解码过程,以此达到去除事务之间冗余的目的,从而缩短事务执行时间,提高了事务执行效率。
在其中一个实施例中,事务执行模块包括多个与指令功能对应的功能单元;
目标事务执行模块940还用于按照智能合约集中指令的指令功能,将目标缓存行中的指令划分为多个类别,将各类别的指令以及指令所需的操作数分配至与指令功能对应的功能单元并行执行。
在其中一个实施例中,目标事务执行模块940还用于若目标事务中当前待执行指令的指令地址不存在于预设的字节码缓存,则对当前待执行指令进行解码,并根据当前待执行指令与预设的字节码缓存中的指令的依赖关系,将解码后的当前待执行指令插入预设的字节码缓存中,更新预设的字节码缓存的指令开销,若目标事务的当前剩余开销不小于更新后的预设的字节码缓存所记录的指令开销总和,则以当前待执行指令所在的缓存行为起点,依次获取各缓存行中指令所需的操作数,根据操作数执行各缓存行中指令的字节码,若预设的字节码缓存中的指令执行完成,则控制指令地址提取模块950执行提取目标事务中当前待执行指令的指令地址的操作,直至目标事务中所有指令执行完毕。
上述事务调度装置和事务执行装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是终端,其内部结构图可以如图11所示。该计算机设备包括处理器、存储器、输入/输出接口、通信接口、显示单元和输入装置。其中,处理器、存储器和输入/输出接口通过系统总线连接,通信接口、显示单元和输入装置通过输入/输出接口连接到系统总线。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质和内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的输入/输出接口用于处理器与外部设备之间交换信息。该计算机设备的通信接口用于与外部的终端进行有线或无线方式的通信,无线方式可通过WIFI、移动蜂窝网络、NFC(近场通信)或其他技术实现。该计算机程序被处理器执行时以实现一种事务执行方法或事务调度方法。该计算机设备的显示单元用于形成视觉可见的画面,可以是显示屏、投影装置或虚拟现实成像装置。显示屏可以是液晶显示屏或者电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
本领域技术人员可以理解,图11中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在其中一个实施例中,提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现上述事务调度方法或事务执行方法中的步骤。
在其中一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现上述事务调度方法或事务执行方法中的步骤。
在其中一个实施例中,提供了一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现上述事务调度方法或事务执行方法中的步骤。
需要说明的是,本申请所涉及的用户信息(包括但不限于用户设备信息、用户个人信息等)和数据(包括但不限于用于分析的数据、存储的数据、展示的数据等),均为经用户授权或者经过各方充分授权的信息和数据,且相关数据的收集、使用和处理需要遵守相关国家和地区的相关法律法规和标准。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(Read-OnlyMemory,ROM)、磁带、软盘、闪存、光存储器、高密度嵌入式非易失性存储器、阻变存储器(ReRAM)、磁变存储器(Magnetoresistive Random Access Memory,MRAM)、铁电存储器(Ferroelectric Random Access Memory,FRAM)、相变存储器(Phase Change Memory,PCM)、石墨烯存储器等。易失性存储器可包括随机存取存储器(Random Access Memory,RAM)或外部高速缓冲存储器等。作为说明而非局限,RAM可以是多种形式,比如静态随机存取存储器(Static Random Access Memory,SRAM)或动态随机存取存储器(Dynamic RandomAccess Memory,DRAM)等。本申请所提供的各实施例中所涉及的数据库可包括关系型数据库和非关系型数据库中至少一种。非关系型数据库可包括基于区块链的分布式数据库等,不限于此。本申请所提供的各实施例中所涉及的处理器可为通用处理器、中央处理器、图形处理器、数字信号处理器、可编程逻辑器、基于量子计算的数据处理逻辑器等,不限于此。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本申请专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请的保护范围应以所附权利要求为准。
Claims (10)
1.一种事务调度方法,其特征在于,应用于事务调度模块,所述方法包括:
获取区块的事务依赖关系图和自由事务集,所述事务依赖关系图包括多个存在依赖关系的依赖事务,所述自由事务集包括不存在依赖关系的自由事务;
根据所述事务依赖关系图和所述自由事务集,选取出多个依赖事务和多个自由事务;
将多个所述依赖事务和多个所述自由事务添加至事务表中,发送事务加载信号至多个事务执行模块,以使所述事务执行模块加载事务、并并行执行事务;
当接收到所述事务执行模块发送的加载完成信号时,从所述事务依赖关系图和所述自由事务集中选择新事务添加至所述事务表中,并更新所述事务依赖关系图、所述事务表和预设的调度表,直至检测到所述区块中所有事务执行完毕。
2.根据权利要求1所述的事务调度方法,其特征在于,所述根据所述事务依赖关系图和所述自由事务集,选取出多个依赖事务和多个自由事务包括:
根据所述事务依赖关系图,选取第一数量的入度为零的依赖事务,以及根据所述自由事务集选取第二数量的自由事务,所述第一数量和所述第二数量基于事务执行模块的数量确定。
3.根据权利要求1所述的事务调度方法,其特征在于,更新所述事务依赖关系图和所述事务表包括:
根据选取出的所述新事务,删除所述事务依赖关系图中对应的事务节点;
根据新事务和当前正在执行的事务的冗余依赖关系,更新所述事务依赖关系图和所述事务表中各事务的权重,以及事务表中事务的同步锁状态。
4.根据权利要求1所述的事务调度方法,其特征在于,所述预设的调度表包括各事务执行模块的依赖表项和冗余表项,所述依赖表项为表征事务表项与当前事务执行模块执行的事务是否存在依赖关系的二进制数值,所述冗余表项为表征事务表项与当前事务执行模块执行的事务是否存在冗余关系的二进制数值;
更新预设的调度表包括:
将除目标事务执行模块之外的事务执行模块的依赖表项作同或运算,得到同或运算结果,所述目标事务执行模块为待加载事务的事务执行模块;
将所述同或运算结果与所述目标事务执行模块的冗余表项作与运算,得到与运算结果;
根据所述与运算结果,从更新后的事务表中筛选出所述目标事务执行模块的下一待执行事务;
根据所述目标事务执行模块的下一执行事务,更新预设的调度表。
5.一种事务执行方法,其特征在于,应用于事务执行模块,所述方法包括:
接收事务调度模块发送的事务加载信号,所述事务加载信号携带事务标识信息;
根据所述事务标识信息,从事务表中选择对应的目标事务,将所述目标事务上锁加载,并发送加载完成信号至所述事务调度模块,所述事务表为区块链中的事务调度模块执行如权利要求1-4中所述的事务调度方法调度得到;
提取所述目标事务中当前待执行指令的指令地址;
若判定所述当前待执行指令的指令地址存在于预设的字节码缓存、且所述目标事务的当前剩余开销不小于所述预设的字节码缓存所记录的指令开销总和,则以当前待执行指令所在的缓存行为起点,依次获取各所述缓存行中指令所需的操作数,根据所述操作数执行各缓存行中指令的字节码;
若预设的字节码缓存中的指令执行完成,则返回所述提取目标事务中当前待执行指令的指令地址的步骤,直至所述目标事务中所有指令执行完毕;
其中,所述预设的字节码缓存中每条缓存行记录有不存在依赖关系的指令的字节码。
6.根据权利要求5所述的事务执行方法,其特征在于,所述事务执行模块包括多个与指令功能对应的功能单元;
所述根据所述操作数执行各缓存行中指令的字节码包括:
按照智能合约指令集中指令的指令功能,将各缓存行中的指令划分为多个类别;
将各类别的指令以及指令所需的操作数分配至与指令功能对应的功能单元并行执行。
7.根据权利要求5所述的事务执行方法,其特征在于,所述方法还包括:
若所述目标事务中当前待执行指令的指令地址不存在于预设的字节码缓存,则对所述当前待执行指令进行解码,并根据所述当前待执行指令与预设的字节码缓存中的指令的依赖关系,将解码后的当前待执行指令插入所述预设的字节码缓存中,更新所述预设的字节码缓存的指令开销;
若目标事务的当前剩余开销不小于所述更新后的预设的字节码缓存所记录的指令开销总和,则以当前待执行指令所在的缓存行为起点,依次获取各所述缓存行中指令所需的操作数,根据所述操作数执行各缓存行中指令的字节码,若预设的字节码缓存中的指令执行完成,则返回所述提取目标事务中当前待执行指令的指令地址的步骤,直至所述目标事务中所有指令执行完毕。
8.一种事务调度装置,其特征在于,所述装置包括:
数据获取模块,用于获取区块的事务依赖关系图和自由事务集,所述事务依赖关系图包括多个存在依赖关系的依赖事务,所述自由事务集包括不存在依赖关系的自由事务;
事务选择模块,用于根据所述事务依赖关系图和所述自由事务集,选取出多个依赖事务和多个自由事务;
事务添加模块,用于将多个所述依赖事务和多个所述自由事务添加至事务表中,发送事务加载信号至多个事务执行模块,以使所述事务执行模块加载事务、并并行执行事务;
数据更新模块,用于当接收所述事务执行模块发送的加载完成信号时,从所述事务依赖关系图和所述自由事务集中选择新事务添加至所述事务表中,并更新所述事务依赖关系图、所述事务表和预设的调度表,直至检测到所述区块中所有事务执行完毕。
9.一种事务执行装置,其特征在于,所述装置包括:
信号接收模块,用于接收事务调度模块发送的事务加载信号,所述事务加载信号携带事务标识信息;
事务加载模块,用于根据所述事务标识信息,从事务表中选择对应的目标事务,将所述目标事务上锁加载,并发送加载完成信号至所述事务调度模块,所述事务表为区块链中的事务调度模块执行如权利要求1-4中所述的事务调度方法调度得到;
指令地址提取模块,用于提取所述目标事务中当前待执行指令的指令地址;
目标事务执行模块,用于若判定所述当前待执行指令的指令地址存在于预设的字节码缓存、且目标事务的当前剩余开销不小于所述预设的字节码缓存所记录的指令开销总和,则以当前待执行指令所在的缓存行为起点,依次获取各所述缓存行中指令所需的操作数,根据所述操作数执行各缓存行中指令的字节码,若预设的字节码缓存中的指令执行完成,则控制所述指令地址提取模块执行所述提取目标事务中当前待执行指令的指令地址的步骤,直至所述目标事务中所有指令执行完毕;
其中,所述预设的字节码缓存中每条缓存行记录有不存在依赖关系的指令的字节码。
10.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1-4或权利要求5-7中任一项所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211721906.3A CN115827204A (zh) | 2022-12-30 | 2022-12-30 | 事务调度方法、事务执行方法、装置和计算机设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211721906.3A CN115827204A (zh) | 2022-12-30 | 2022-12-30 | 事务调度方法、事务执行方法、装置和计算机设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115827204A true CN115827204A (zh) | 2023-03-21 |
Family
ID=85519607
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211721906.3A Pending CN115827204A (zh) | 2022-12-30 | 2022-12-30 | 事务调度方法、事务执行方法、装置和计算机设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115827204A (zh) |
-
2022
- 2022-12-30 CN CN202211721906.3A patent/CN115827204A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108846659B (zh) | 基于区块链的转账方法、装置及存储介质 | |
CN108389129B (zh) | 基于区块链的交易执行方法及装置、电子设备 | |
US8387066B1 (en) | Dependency-based task management using set of preconditions to generate scheduling data structure in storage area network | |
CN111241061B (zh) | 状态数据库的写入方法、数据处理装置及存储介质 | |
CN109951547B (zh) | 事务请求并行处理方法、装置、设备和介质 | |
CN107015853A (zh) | 多阶段任务的实现方法和装置 | |
CN112559635B (zh) | 以太坊联盟链节点的业务处理方法、装置、设备及介质 | |
CN113504918A (zh) | 设备树配置优化方法、装置、计算机设备和存储介质 | |
CN115858213A (zh) | 任务排程检查方法、装置、计算机设备和存储介质 | |
CN114936256A (zh) | 在区块链中执行交易的方法和区块链节点 | |
CN107391539B (zh) | 事务处理方法、服务器和存储介质 | |
JP6812826B2 (ja) | 格納方法、格納装置及び格納プログラム | |
CN111209283A (zh) | 一种数据处理方法及装置 | |
CN115827204A (zh) | 事务调度方法、事务执行方法、装置和计算机设备 | |
CN115757172A (zh) | 测试执行方法、装置、存储介质及计算机设备 | |
CN115203746A (zh) | 数据账户的访问授权方法及装置 | |
CN114020278B (zh) | 数据处理方法、装置、设备及存储介质 | |
CN118467798B (zh) | 一种产品选配方法、装置、设备及介质 | |
CN113342681B (zh) | 一种回归测试方法及装置 | |
JP2017091213A (ja) | データベース更新処理システムおよびデータベース更新処理方法 | |
CN113592455A (zh) | 流程创建方法、装置、设备及存储介质 | |
CN116993340A (zh) | 一种交易处理方法、装置、设备、存储介质及程序产品 | |
CN116910028A (zh) | 数据迁移方法、数据迁移装置及计算机可读存储介质 | |
CN114339961A (zh) | 网络接入方法、装置、电子设备、存储介质和计算机程序产品 | |
CN117851505A (zh) | 一种区块分片方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |