一种多线程数据架构、多线程消息传递方法及系统与流程

文档序号:21887397发布日期:2020-08-18 17:27阅读:272来源:国知局
一种多线程数据架构、多线程消息传递方法及系统与流程

本发明属于多线程开发技术领域,具体涉及一种多线程数据架构、多线程消息传递方法及系统。



背景技术:

在计算机程序中,多线程程序具有能有效发挥cpu的运算资源的优点,而所有多线程软件都需要共同面对跨线程消息传递的问题。计算机程序在不同线程间进行数据传递时,其最底层都是实用共享内存的方法,也即在内存中开辟一块空间,允许不同线程共同拥有所述空间的访问权。实际代码中,为了减少数据的拷贝量,跨线程发送信息时往往并不是发送完整的数据,而只是发送所述数据所在的内存地址。由于数据量短小,这些信息片段也因而常被成为消息。传递一般被称为跨线程消息传递,被传递的信息泛称为消息。

跨线程消息传递会面临到数据同步、资源互锁等问题,对软件而言是一个具有一定风险的操作,开发过程中需要程序员格外小心。同步是指不同线程对同一资源的访问必须在时间上加以区隔,不能一条线程还没操作完,另一条线程就又介入进来,否则就会造成数据错误。为了协调不同线程对同一块资源的访问,许多编程语言都提供了锁的概念。锁是一个标志位,用于标识某块资源是否正在使用中。对于正在使用中的资源,别的线程也想要使用它的话必须要先等待,等到开锁释放所述资源的使用权才可以介入使用。而使用标志锁又可能引发多条线程需要使用的多个资源相互锁住,造成程序卡死。

跨线程消息传递具有很大的风险性,一旦把握不好很容易导致程序崩溃。因而对软件开发团队而言,开发多线程程序具有很大不确定性和工程风险。尽管多线程可以更好的发挥cpu计算资源,但开发多线程程序仍然不是当今软件开发界的主流。目前软件开发中对多线程的使用还仅限于那些可将一个大运算任务分解为若干运算过程类似的同质子任务的情况。例如在进行矩阵运算时,通过多线程对矩阵的不同元素同时进行计算,又如渲染图片时通过并行计算同时渲染图片的不同部分等。此类多线程应用,其效力仅能发挥于加速某些特定任务的执行速度,而不能从总体设计层面采用多线程方式的软件架构。目前还没有能够在软件架构层面实施多线程程序的软件设计方法,更缺乏标准化的跨线程数据传递与通讯机制。



技术实现要素:

针对现有技术中的缺陷,本发明提供了一种多线程数据架构、多线程消息传递方法及系统,以神经元工作模式为仿生学基础,将程序运算内容依其数据流状态变化以及各数据之间的因果推演关系进行线程分解,从而构建出多线程数据架构和消息传递机制,提高了多线程运算的效率。

第一方面,本发明提供了一种多线程数据架构,包括逻辑变量、逻辑节点、节点列表、神经元、神经元中枢和神经元线程;

所述逻辑变量,用于表示业务范围内所涉及的各个逻辑变量,每一个逻辑变量均有对应的变量名;

所述逻辑节点,用于表示不同逻辑变量之间的因果关系,每个逻辑节点包含代表节点的逻辑变量,以及对所述逻辑变量的状态产生影响的所有上游逻辑变量;

所述节点列表,用于根据逻辑关系记录存储各个实例化的逻辑节点对象;

所述神经元,用于表示逻辑节点内各逻辑变量之间的逻辑推理行为,每个神经元包含代表对应节点的逻辑变量,以及所述逻辑变量与上游逻辑变量实现因果关系的逻辑推理算法;

所述神经元中枢,用于集中存放神经元,在程序开始运行时,实例化后的神经元中枢载入节点列表,并根据节点列表的内容实例化全部的神经元对象,进而根据节点列表记录的逻辑关系构建逻辑网;

所述神经元线程,每个实例化后的神经元线程对象向神经元中枢注册,神经元中枢将注册的神经元线程与对应的神经元对象相关联;神经元对象在感知到输入状态改变后,触发关联的神经元线程对象进行所需运算,进而进行整个逻辑网的多线程运算。

优选地,所述神经元线程是bot类的一个子类,继承bot类的属性和方法。

第二方面,本发明提供了一种多线程消息传递方法,基于第一方面所述的一种多线程数据架构,其特征在于,包括以下步骤:

一个神经元线程对象的工作线程产生消息时,所述神经元线程对象通过fireup函数将消息数据传递给关联的神经元对象;

神经元对象根据消息数据感知到逻辑状态值发生变化时,所述神经元对象调用fire函数将逻辑状态值推送给下游神经元对象;

下游神经元对象在感知到输入的逻辑状态值变化时,唤醒关联的下游神经元线程对象的工作线程,下游神经元线程对象利用input函数接收输入的消息数据,并在自身线程内对消息数据进行处理,从而完成一个线程到另一个工作线程的消息传递。

优选地,所述的一种多线程消息传递方法,还包括以下步骤:

初始化每个神经元线程对象,并将每个神经元线程对象与对应的神经元对象相关联。

优选地,所述初始化每个神经元线程对象,并将每个神经元线程对象与对应的神经元对象相关联,具体为:

程序启动后实例化神经元中枢和神经元线程对象;

神经元中枢载入节点列表,根据节点列表的内容实例化全部的神经元对象,并根据节点列表记录的逻辑关系构建逻辑网;

神经元线程对象向神经元中枢发送注册信息,神经元中枢将注册的神经元线程对象和对应的神经元对象相关联。

优选地,所述神经元对象调用fire函数将逻辑状态值推送给下游神经元对象,具体为:

所述神经元对象查询订阅表,订阅表存储有与所述神经元对象有下游逻辑关系的神经元对象;

根据订阅表得到下游神经元对象;

所述神经元对象调用fire函数将逻辑状态值推送给下游神经元对象。

第三方面,本发明提供了一种多线程消息传递系统,基于第一方面所述的一种多线程数据架构,包括消息产生单元、逻辑推送单元和线程跨传单元:

消息产生单元,用于当一个神经元线程对象的工作线程产生消息时,所述神经元线程对象通过fireup函数将消息数据传递给关联的神经元对象;

逻辑推送单元,用于神经元对象根据消息数据,感知到逻辑状态值发生变化时,所述神经元对象调用fire函数将逻辑状态值推送给下游神经元对象;

线程跨传单元,用于下游神经元对象在感知到输入的逻辑状态值变化时,唤醒关联的下游神经元线程对象的工作线程,下游神经元线程对象利用input函数接收输入的消息数据,并在自身线程内对消息数据进行处理,从而完成一个线程到另一个工作线程的消息传递。

优选地,所述的一种多线程消息传递方法,还包括初始化单元;

所述初始化单元,用于初始化每个神经元线程对象,并将每个神经元线程对象与对应的神经元对象相关联。

优选地,所述初始化每个神经元线程对象,并将每个神经元线程对象与对应的神经元对象相关联,具体为:

程序启动后实例化神经元中枢和神经元线程对象;

神经元中枢载入节点列表,根据节点列表的内容实例化全部的神经元对象,并根据节点列表记录的逻辑关系构建逻辑网;

神经元线程对象向神经元中枢发送注册信息,神经元中枢将注册的神经元线程对象和对应的神经元对象相关联。

优选地,所述神经元对象调用fire函数将逻辑状态值推送给下游神经元对象,具体为:

所述神经元对象查询订阅表,订阅表存储有与所述神经元对象有下游逻辑关系的神经元对象;

根据订阅表得到下游神经元对象;

所述神经元对象调用fire函数将逻辑状态值推送给下游神经元对象。

本发明的技术方案,以神经元工作模式为仿生学基础,将程序运算内容依其数据流状态变化以及各数据之间的因果推演关系进行线程分解,从而构建出多线程数据架构和消息传递机制,提高了多线程运算的效率。

附图说明

为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍。在所有附图中,类似的元件或部分一般由类似的附图标记标识。附图中,各元件或部分并不一定按照实际的比例绘制。

图1为本实施例中多线程数据架构的结构示意图;

图2为本实施例中多线程消息传递方法的流程图;

图3为本实施例中神经元中枢初始化的任务流程图;

图4为本实施例中线程间消息传递时的交互示意图;

图5为本实施例中具体案例的模块部署图;

图6为本实施例中多线程消息传递系统的结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

应当理解,当在本说明书和所附权利要求书中使用时,术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。

还应当理解,在此本发明说明书中所使用的术语仅仅是出于描述特定实施例的目的而并不意在限制本发明。如在本发明说明书和所附权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“所述”意在包括复数形式。

还应当进一步理解,在本发明说明书和所附权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。

如在本说明书和所附权利要求书中所使用的那样,术语“如果”可以依据上下文被解释为“当...时”或“一旦”或“响应于确定”或“响应于检测到”。类似地,短语“如果确定”或“如果检测到[所描述条件或事件]”可以依据上下文被解释为意指“一旦确定”或“响应于确定”或“一旦检测到[所描述条件或事件]”或“响应于检测到[所描述条件或事件]”。

人脑是一个典型的多线程处理器,每一个脑神经元具有自己独立的生命周期,也即是工作于其独立的工作线程内。大脑的工作原理现今科学界还没有统一的理论,但基于一般的脑解剖学和显微技术,我们可以对脑细胞的基本工作方式做一些可信的简化。大脑内的最基本工作单位是脑细胞,具备收发神经冲动功能的脑细胞称为脑神经元。神经元在外形上似芒星,其外伸的神经纤维与其他神经元的神经纤维形成突触,用于传导神经电冲动。每个神经元具备多根用于接收神经冲动的神经纤维,称为树突,以及一根用于发送神经冲动的神经纤维称为轴突。神经元在工作时利用树突感知周边神经电变化,所感知到的电变化经树突汇总至神经基部,神经基部在对周边信号进行综合判断后选择是否改变自身的激发状态,若达到激发条件,则通过轴突向外界发出电冲动。

将上述脑神经元的工作过程可概括为以下特点:

1)每个神经元代表着一个独立的逻辑变量,不同的神经元代表着不同的逻辑变量,每个神经元的激发状态表征所述逻辑变量的状态。

2)神经元存在输入和输出两类端口,多个神经元利用各自的输入和输出端口连接成为一个具有层次关系的逻辑网。以下称连接在神经突触输出侧的神经元所代表的逻辑变量为上游逻辑变量,另一侧则为下游逻辑变量。

3)每个神经元通过考察其所有上游逻辑变量的实时状态,综合计算得出其自身所代表逻辑变量的状态,进而予以下发。

以上是脑神经网在多线程消息传递条件下的逻辑推理工作机制。仿效此生物机制,本实施例提供了一种多线程数据架构、多线程消息传递方法及系统。

实施例一:

本实施例提供了一种多线程数据架构,如图1所示,包括逻辑变量concept、逻辑节点notion、节点列表notionlist、神经元neuron、神经元中枢neuroncenter和神经元线程neuronagent;

所述逻辑变量concept,用于表示业务范围内所涉及的各个逻辑变量,每一个concept均有对应的变量名。concept是一个枚举变量,其变量名应取为具有实质含义的一段文字,因而concept的变量名也作为语言学标签表征这个逻辑变量的实际意义。在实际编程中,为调试需要往往还需要一组与concept中的每个值的语言学标签同名的字符串。

所述逻辑节点notion,用于表示不同concept之间的因果关系,每个notion包含代表节点的concept,以及对所述concept的状态产生影响的所有上游concept。notion中所存储的实质信息是不同逻辑变量间的因果关系,在因果关系中,上游concept的状态改变时会对下游concept产生影响。

所述节点列表notionlist,用于根据逻辑关系记录存储各个实例化的notion对象。将notion中所存储的因果关系前后相连,就可得到该程序所要处理的业务逻辑的完整的逻辑网。notionlist就是用于集中存储每个实例化的notion对象的空间,利用notionlist,开发人员可以对整个程序的业务逻辑进行完整的审视。

所述神经元neuron,用于表示notion内各concept之间的逻辑推理行为,每个neuron包含代表对应节点的concept,以及所述concept与上游concept实现因果关系的逻辑推理算法,neuron是最基本的逻辑推理单元,是在notion的基础上附加上逻辑推理行为,notion中的数据保存了该逻辑变量的状态影响于哪些其他逻辑变量,neuron中含有的算法则实现了这些逻辑状态值的传递行为。

所述神经元中枢neuroncenter,用于集中存放neuron,在程序开始运行时,实例化后的neuroncenter载入notionlist,并根据notionlist的内容实例化全部的neuron对象,进而根据notionlist记录的逻辑关系构建逻辑网。

所述神经元线程neuronagent,每个实例化后的neuronagent对象向neuroncenter注册,neuroncenter将注册的neuronagent与对应的neuron对象相关联;neuron对象在感知到输入状态改变后,触发关联的neuronagent对象进行所需运算,进而进行整个逻辑网的多线程运算。neuronagent对象是与neuron对象配套的专用计算单元,这些计算过程可能很冗长,也可能具有很大的代码量,因而neuronagent对象需要配备独立的工作线程,并在器独立线程内完成这些工作。本实施例的神经元线程neuronagent是bot类的一个子类,如专利201910281108.5一种多线程程序架构方法及架构系统中记载的bot类,本实施例的neuronagent继承该bot类的属性和方法,。

综上所述,本实施以神经元工作模式为仿生学基础,将程序运算内容依其数据流状态变化以及各数据之间的因果推演关系进行线程分解,从而构建出本实施例的多线程数据架构,通过本实施例的多线程数据架构进行多线程运算时,提高了多线程运算的效率。

实施例二:

本实施例提供了一种多线程消息传递方法,基于实施例一所述的一种多线程数据架构,如图2所示,包括以下步骤:

s1,初始化每个neuronagent对象,并将每个neuronagent对象与对应的neuron对象相关联;

s2,一个neuronagent对象的工作线程产生消息时,所述neuronagent对象通过fireup函数将消息数据传递给关联的neuron对象;

s3,neuron对象根据消息数据感知到逻辑状态值发生变化时,所述neuron对象调用fire函数将逻辑状态值推送给下游neuron对象;

s4,下游neuron对象在感知到输入的逻辑状态值变化时,唤醒关联的下游neuronagent对象的工作线程,下游neuronagent对象利用input函数接收输入的消息数据,并在自身线程内对消息数据进行处理,从而完成一个线程到另一个工作线程的消息传递。

本实施例步骤s1中,所述初始化每个neuronagent对象,并将每个neuronagent对象与对应的neuron对象相关联,具体为:

程序启动后实例化neuroncenter和neuronagent对象(程序启动后第一时间进行实例化);

neuroncenter载入notionlist,根据notionlist的内容实例化全部的neuron对象(即根据notionlist内实例化的concept对象,实例化neuron对象),并根据notionlist记录的逻辑关系构建逻辑网;

neuronagent对象向neuroncenter发送注册信息,neuroncenter将注册的neuronagent对象和对应的neuron对象相关联。

如图3所示,为本实施例中neuroncenter初始化的任务流程图,在进行初始化和对象关联后,原始消息产生于某个neuronagent对象的工作线程后,开始了消息传递。neuronagent对象通过函数将该消息数据传递给与其关联的neuron对象。从逻辑网的角度看,这相当于与该neuron相关联的逻辑变量的逻辑状态值发生了改变。

当neuron对象根据消息数据感知到逻辑状态值发生变化时,neuron对象查询订阅表。所述订阅表存储有与所述neuron对象有下游逻辑关系的neuron对象,所述订阅表还存储有与所述neuron对象有上游逻辑关系的neuron对象,因此通过订阅表可了解各neuron对象之间的逻辑关系。根据订阅表得到下游neuron对象。所述neuron对象调用fire函数将逻辑状态值推送给下游neuron对象。此过程相当于神经元激发了一次神经电冲动。

下游neuron对象在感知到输入状态变化时,通过线程锁agentalarm字段唤醒与其关联的neuronagent对象的工作线程。neuronagent对象利用其input函数接收输入的数据,并在自身线程内对数据进行处理。如图4所示,为本实施例中线程间消息传递时的交互示意图,至此该消息完成了从一个线程到另一个线程的传递,同理,逻辑网内的各个线程之间可通过上述方式进行消息消息传递,从而实现整个逻辑网的多线程运算。

下面以一个具体的程序为例,如图5所示,为本案例的模块部署图,更详细地描述本实施例所述的多线程数据架构和消息传递方法。假设某程序需要通过路人撑伞和地面积水来推测当前是否下雨,判断逻辑是:路人撑伞且地面湿则当前下雨,否则当前未下雨。此程序中有三个逻辑变量,分别是:撑伞,地面湿,下雨。定义逻辑变量concept如下:

在notionlist中定义这三个逻辑变量的因果关系如下:

staticvector<notion>notionlist{

notion{umbrella},

notion{ground_wet},

notion{raining,{umbrella,ground_wet}}

};

程序运行时为neuroncenter载入notionlist,neuroncenter将相应的实例化三个neuron对象,并依照其定义的因果关系构建逻辑网,如下所示:

neuron(umbrella);

neuron(ground_wet);

neuron(raining);

在实例化三个neuron对象后,程序还需建立三个neuronagent对象:

<neuronagent>umbrellamonitorumbrellamonitor;

<neuronagent>groundmonitorgroundmornitor;

<neuronagent>raininganalyzerraininganalyzer;

这三个对象分别于上述三个逻辑变量相关联,且各自有独立的工作线程。umbrellamornitor负责监控路人打伞,并设置neuron(umbrella)的逻辑状态值,groundmornitor负责监控地面积水,并设置neuron(ground_wet)的逻辑状态值。这两个逻辑变量的逻辑状态值会被作为输入信号传递给neuron(raining),进而传递给raininganalyzer,并在raininganalyzer对象的工作线程中完成逻辑分析,最后调用raininganalyzer::fireup()设定neuron(raining)的逻辑状态值,neuron(raining)的;逻辑状态值可得到当前是否下雨。

如neuron(umbrella)的逻辑状态值为1,neuron(ground_wet)的逻辑状态值为1,neuron(raining)根据与算法,得到逻辑状态值为1,则表示当前下雨了。如果neuron(umbrella)的逻辑状态值和neuron(ground_wet)的逻辑状态值,其中一个为0,则根据neuron(raining)根据与算法,得到逻辑状态值为0,表示当前没有下雨。

综上所述,本实施以神经元工作模式为仿生学基础,将程序运算内容依其数据流状态变化以及各数据之间的因果推演关系进行线程分解,从而构建出本实施例的多线程数据架构和多线程消息传递方法,通过本实施例的架构和消息传递方法进行多线程运算时,提高了多线程运算的效率。

实施例三:

本实施例提供了一种多线程消息传递系统,基于实施例一所述的一种多线程数据架构,如图6所示,包括初始化单元、消息产生单元、逻辑推送单元和线程跨传单元:

所述初始化单元,用于初始化每个neuronagent对象,并将每个neuronagent对象与对应的neuron对象相关联;

消息产生单元,用于当一个neuronagent对象的工作线程产生消息时,所述neuronagent对象通过fireup函数将消息数据传递给关联的neuron对象;

逻辑推送单元,用于neuron对象根据消息数据,感知到逻辑状态值发生变化时,所述neuron对象调用fire函数将逻辑状态值推送给下游neuron对象;

线程跨传单元,用于下游neuron对象在感知到输入的逻辑状态值变化时,唤醒关联的下游neuronagent对象的工作线程,下游neuronagent对象利用input函数接收输入的消息数据,并在自身线程内对消息数据进行处理,从而完成一个线程到另一个工作线程的消息传递。

其中,所述初始化每个neuronagent对象,并将每个neuronagent对象与对应的neuron对象相关联,具体为:

程序启动后实例化neuroncenter和neuronagent对象;

neuroncenter载入notionlist,根据notionlist的内容实例化全部的neuron对象,并根据notionlist记录的逻辑关系构建逻辑网;

neuronagent对象向neuroncenter发送注册信息,neuroncenter将注册的neuronagent对象和对应的neuron对象相关联。

当neuron对象根据消息数据感知到逻辑状态值发生变化时,neuron对象查询订阅表。所述订阅表存储有与所述neuron对象有下游逻辑关系的neuron对象,所述订阅表还存储有与所述neuron对象有上游逻辑关系的neuron对象,因此通过订阅表可了解各neuron对象之间的逻辑关系。根据订阅表得到下游neuron对象。所述neuron对象调用fire函数将逻辑状态值推送给下游neuron对象。此过程相当于神经元激发了一次神经电冲动。

下游neuron对象在感知到输入状态变化时,通过线程锁agentalarm字段唤醒与其关联的neuronagent对象的工作线程。neuronagent对象利用其input函数接收输入的数据,并在自身线程内对数据进行处理。至此该消息完成了从一个线程到另一个线程的传递,同理,逻辑网内的各个线程之间可通过上述方式进行消息消息传递,从而实现整个逻辑网的多线程运算。

下面以一个具体的程序为例,更详细地描述本实施例所述的多线程数据架构和消息传递系统。假设某程序需要通过路人撑伞和地面积水来推测当前是否下雨,判断逻辑是:路人撑伞且地面湿则当前下雨,否则当前未下雨。此程序中有三个逻辑变量,分别是:撑伞,地面湿,下雨。定义逻辑变量concept如下:

在notionlist中定义这三个逻辑变量的因果关系如下:

staticvector<notion>notionlist{

notion{umbrella},

notion{ground_wet},

notion{raining,{umbrella,ground_wet}}

};

程序运行时为neuroncenter载入notionlist,neuroncenter将相应的实例化三个neuron对象,并依照其定义的因果关系构建逻辑网,如下所示:

neuron(umbrella);

neuron(ground_wet);

neuron(raining);

在实例化三个neuron对象后,程序还需建立三个neuronagent对象:

<neuronagent>umbrellamonitorumbrellamonitor;

<neuronagent>groundmonitorgroundmornitor;

<neuronagent>raininganalyzerraininganalyzer;

这三个对象分别于上述三个逻辑变量相关联,且各自有独立的工作线程。umbrellamornitor负责监控路人打伞,并设置neuron(umbrella)的逻辑状态值,groundmornitor负责监控地面积水,并设置neuron(ground_wet)的逻辑状态值。这两个逻辑变量的逻辑状态值会被作为输入信号传递给neuron(raining),进而传递给raininganalyzer,并在raininganalyzer对象的工作线程中完成逻辑分析,最后调用raininganalyzer::fireup()设定neuron(raining)的逻辑状态值,neuron(raining)的;逻辑状态值可得到当前是否下雨。

如neuron(umbrella)的逻辑状态值为1,neuron(ground_wet)的逻辑状态值为1,neuron(raining)根据与算法,得到逻辑状态值为1,则表示当前下雨了。如果neuron(umbrella)的逻辑状态值和neuron(ground_wet)的逻辑状态值,其中一个为0,则根据neuron(raining)根据与算法,得到逻辑状态值为0,表示当前没有下雨。

综上所述,本实施以神经元工作模式为仿生学基础,将程序运算内容依其数据流状态变化以及各数据之间的因果推演关系进行线程分解,从而构建出本实施例的多线程数据架构和多线程消息传递系统,通过本实施例的架构和消息传递系统进行多线程运算时,提高了多线程运算的效率。

本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

在本申请所提供的实施例中,应所述理解到,所述步骤和单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个步骤可结合为一个步骤,一个步骤可拆分为多个步骤,或一些特征可以忽略等。

最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围,其均应涵盖在本发明的权利要求和说明书的范围当中。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1