共享内存访问方法及系统与流程

文档序号:16134197发布日期:2018-12-01 00:43阅读:247来源:国知局

本发明涉及移动业务支撑技术领域,尤其涉及一种共享内存访问方法及系统。

背景技术

在高并发情况下,多个访问请求需要访问同一共享内存时,为了保证线程安全,多个访问请求采用加锁机制访问同一共享内存,当一个访问请求访问该共享内存的某个数据时,将访问过程通过加锁的方式进行保护,其它线程访问请求不能进行访问,直到该访问请求操作完成时,其它的访问请求才可访问共享内存。

发明人对现有的共享内存访问方法进行研究发现,由于多个访问请求之间需要对锁竞争,在高并发下大量访问请求处于等待状态,导致cpu处理无效的上下文切换,浪费cpu时钟。



技术实现要素:

有鉴于此,本发明提供了一种共享内存访问方法,用以解决现有技术中由于多个访问请求之间需要对锁竞争,在高并发下大量访问请求处于等待状态,导致cpu处理无效的上下文切换,浪费cpu时钟的问题。具体方案如下:

一种共享内存访问方法,应用于内存操作处理器,包括:

当内存操作处理器接收到对共享内存的访问请求时,将所述访问请求存储到预设的请求队列中,所述预设的请求队列中包含至少一个访问请求;

获取所述预设的请求队列中的目标访问请求;

解析所述目标访问请求包含的访问操作,依据所述访问操作访问所述共享内存;

当访问完成时,将访问结果传递到对应的目标结果队列中。

上述的方法,可选的,获取所述预设的请求队列中的目标访问请求包括:

解析所述预设的请求队列中每一个访问请求的访问优先级;

将所述预设的请求队列中优先级最高的访问请求作为所述目标访问请求。

上述的方法,可选的,当访问完成时,将访问结果传递到对应的目标结果队列中,包括:

解析所述访问结果中包含的线程标识;

依据所述线程标识将所述访问结果传递到与所述线程标识相同目标结果队列中。

上述的方法,可选的,还包括:

查找与所述访问结果对应的目标线程;

令所述目标线程读取所述目标结果队列中的访问结果;

依据所述访问结果继续执行所述目标线程的后续线程。

上述的方法,可选的,还包括:

依据cpu绑定技术,对所述内存操作处理器进行亲缘性绑定。

一种共享内存访问系统,应用于内存操作处理器,包括:

存储模块,用于当内存操作处理器接收到对共享内存的访问请求时,将所述访问请求存储到预设的请求队列中,所述预设的请求队列中包含至少一个访问请求;

获取模块,用于获取所述预设的请求队列中的目标访问请求;

访问模块,用于解析所述目标访问请求包含的访问操作,依据所述访问操作访问所述共享内存;

传递模块,用于当访问完成时,将访问结果传递到对应的目标结果队列中。

上述的系统,可选的,所述获取模块包括:

第一解析单元,用于解析所述预设的请求队列中每一个访问请求的访问优先级;

确定单元,用于将所述预设的请求队列中优先级最高的访问请求作为所述目标访问请求。

上述的系统,可选的,所述传递模块包括:

第二解析单元,用于解析所述访问结果中包含的线程标识;

传递单元,用于依据所述线程标识将所述访问结果传递到与所述线程标识相同目标结果队列中。

上述的系统,可选的,还包括:

查找模块,用于查找与所述访问结果对应的目标线程;

读取模块,用于令所述目标线程读取所述目标结果队列中的访问结果;

执行模块,用于依据所述访问结果继续执行所述目标线程的后续线程。

上述的系统,可选的,还包括:

绑定模块,用于依据cpu绑定技术,对所述内存操作处理器进行亲缘性绑定。

与现有技术相比,本发明包括以下优点:

本发明提供了一种共享内存访问方法,应用于内存操作处理器,包括:当内存操作处理器接收到对共享内存的访问请求时,将所述访问请求存储到预设的请求队列中,所述预设的请求队列中包含至少一个访问请求;获取所述预设的请求队列中的目标访问请求;解析所述目标访问请求包含的访问操作,依据所述访问操作访问所述共享内存;当访问完成时,将访问结果传递到对应的目标结果队列中。上述的访问方法,将访问请求存储到预设的请求队列中,在所述预设的请求队列中获取目标访问请求,避免了在高并发下大量访问请求处于等待状态,导致cpu处理无效的上下文切换,浪费cpu时钟的问题。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本申请实施例公开的一种共享内存访问方法流程图;

图2为本申请实施例公开的一种共享内存访问方法又一方法流程图;

图3为本申请实施例公开的一种共享内存访问方法又一方法流程图;

图4为本申请实施例公开的一种共享内存访问方法又一方法流程图;

图5为本申请实施例公开的一种共享内存访问系统结构框图。

具体实施方式

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

对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

本发明提供了一种共享内存的访问方法,所述访问方法应用于移动业务支撑技术领域中多线程对共享内存的访问过程中,所述共享内存可以为java中的共享内存,所述访问方法的执行主体可以为内存操作处理器或者其它可以执行本发明所述共享内存访问方法的控制器或者处理器等。本发明实施例中,以执行主体为内存操作处理器为例进行说明,所述访问方法的执行流程如图1所示,包括步骤:

s101、当内存操作处理器接收到对共享内存的访问请求时,将所述访问请求存储到预设的请求队列中,所述预设的请求队列中包含至少一个访问请求;

本发明实施例中,当内存操作处理器接收到一个或者多个线程对共享内存的访问请求时,其中,访问请求和线程之间存在对应关系,将所述访问请求存储到预设的请求队列中。

s102、获取所述预设的请求队列中的目标访问请求;

本发明实施例中,依据优先级的顺序确定所述预设的请求队列中的目标访问请求。

s103、解析所述目标访问请求包含的访问操作,依据所述访问操作访问所述共享内存;

本发明实施例中,所述目标访问请求中包含对所述共享内存的访问操作,所述访问操作可以为访问或者处理所述共享内存中的数据等。

s104、当访问完成时,将访问结果传递到对应的目标结果队列中。

本发明实施例中,当访问完成时,会向所述内存操作处理器发送访问完成指令,当所述内存操作处理器接收到所述访问完成指令时,将访问结果传递到对应的目标结果队列中。

本发明实施例中,还包括:依据cpu绑定技术,对所述内存操作处理器进行亲缘性绑定,进行了亲缘性绑定之后,所述内存操作处理器对应的内存操作线程会在制定了cpu上运行,减少了java的内存屏障,提高了cpu缓存的命中率。

本发明提供了一种共享内存访问方法,应用于内存操作处理器,包括:当内存操作处理器接收到对共享内存的访问请求时,将所述访问请求存储到预设的请求队列中,所述预设的请求队列中包含至少一个访问请求;获取所述预设的请求队列中的目标访问请求;解析所述目标访问请求包含的访问操作,依据所述访问操作访问所述共享内存;当访问完成时,将访问结果传递到对应的目标结果队列中。上述的访问方法,将访问请求存储到预设的请求队列中,在所述预设的请求队列中获取目标访问请求,避免了在高并发下大量访问请求处于等待状态,导致cpu处理无效的上下文切换,浪费cpu时钟的问题。

本发明实施例中,,获取所述预设的请求队列中的目标访问请求的方法流程如图2所示,包括步骤:

s201、解析所述预设的请求队列中每一个访问请求的访问优先级;

本发明实施例中,每一个访问请求都会关联一个优先级,该优先级可以通过与所述访问请求对应的线程的优先级来确定,或者依据每一个访问请求产生的时间的先后顺序来确定优先级,或者为多种优先级的确定方法分配权重,通过多种优先级确定方法中各个优先级确定方法的权重共同确定每一个访问请求的优先级,也可以是其它的优选的优先级的确定方式

s202、将所述预设的请求队列中优先级最高的访问请求作为所述目标访问请求。

本发明实施例中,所述预设的请求队列中包含多个访问请求时,若当前优先级最高的目标访问请求已经对共享内存访问完成,需要选取新的目标访问请求时,由于访问请求是时时刻刻不断产生的,当前的请求队列中会有新的访问请求加入,因此,每次确定目标访问请求时,都需要重复s201-s202的方法步骤。

本发明实施例中,当访问完成时,将访问结果传递到对应的目标结果队列中的方法流程如图3所示,包括步骤:

s301、解析所述访问结果中包含的线程标识;

本发明实施例中,每一个访问结果中都包含一个线程标识,所述线程标识具有唯一性,用于区分不同的访问结果,所述线程标识可以数字、编号、字母或者其它优先优选类型的标识。

s302、依据所述线程标识将所述访问结果传递到与所述线程标识相同目标结果队列中。

本发明实施例中,线程和结果队列存在对应关系,线程和结果队列中也包含线程标识,针对同一个线程,其对应的访问结果和结果队列中包含的线程标识相同,因此,依据线程标识将所述访问结果传递到与所述线程标识相同目标结果队列中。

将所述访问结果传递到所述目标结果队列之后,还需要依据所述线程标识,查找与所述访问结果对应的目标线程,令所述目标线程读取所述目标结果队列中的访问结果,依据所述访问结果继续执行所述目标线程的后续线程。

本发明实施例中,在高并发下,所有请求访问线程提交访问请求到请求队列,内存操作线程从请求队列中获取访问请求,根据访问请求内容进行共享内存操作,并将操作结果回写到该线程的结果队列中,请求线程从自己的结果队列读取结果。通过上面转换将多线程加锁访问共享内存转换为单线程无锁访问共享内存。

具体的执行方法的示意图如图4所示,包括:

(1)线程1提交共享内存访问请求到请求队列中;

(2)内存操作线程从请求队列中获取共享内存访问请求;

(3)内存操作线程给家共享内存访问请求内存操作共享内存;

(4)内存操作线程将内存操作结果回写到线程结果队列,获取下一个共享内存访问请求;

(5)线程1从结果队列读取操作结果,继续线程1后续的执行。

本发明实施例中,与上述的共享内存访问方法相对应的本发明实施例还提供了一种共享内存访问系统,所述访问系统的结构框图,如图5所示,包括:

存储模块401,获取模块402,访问模块403和传递模块404。

其中,

所述存储模块401,用于当内存操作处理器接收到对共享内存的访问请求时,将所述访问请求存储到预设的请求队列中,所述预设的请求队列中包含至少一个访问请求;

所述获取模块402,用于获取所述预设的请求队列中的目标访问请求;

所述访问模块403,用于解析所述目标访问请求包含的访问操作,依据所述访问操作访问所述共享内存;

所述传递模块404,用于当访问完成时,将访问结果传递到对应的目标结果队列中。

本发明提供了一种共享内存访问系统,应用于内存操作处理器,包括:当内存操作处理器接收到对共享内存的访问请求时,将所述访问请求存储到预设的请求队列中,所述预设的请求队列中包含至少一个访问请求;获取所述预设的请求队列中的目标访问请求;解析所述目标访问请求包含的访问操作,依据所述访问操作访问所述共享内存;当访问完成时,将访问结果传递到对应的目标结果队列中。上述的访问系统,将访问请求存储到预设的请求队列中,在所述预设的请求队列中获取目标访问请求,避免了在高并发下大量访问请求处于等待状态,导致cpu处理无效的上下文切换,浪费cpu时钟的问题。

本发明实施例中,所述获取模块402包括:

第一解析单元405和确定单元406。

其中,

所述第一解析单元405,用于解析所述预设的请求队列中每一个访问请求的访问优先级;

所述确定单元406,用于将所述预设的请求队列中优先级最高的访问请求作为所述目标访问请求。

本发明实施例中,所述传递模块404包括:

第二解析单元407和传递单元408。

其中,

所述第二解析单元407,用于解析所述访问结果中包含的线程标识;

所述传递单元408,用于依据所述线程标识将所述访问结果传递到与所述线程标识相同目标结果队列中。

本发明实施例中,所述访问系统还包括:

查找模块409、读取模块410和执行模块411。

其中,

所述查找模块409,用于查找与所述访问结果对应的目标线程;

所述读取模块410,用于令所述目标线程读取所述目标结果队列中的访问结果;

所述执行模块411,用于依据所述访问结果继续执行所述目标线程的后续线程。

本发明实施例中,所述访问系统还包括绑定模块412。

其中,

所述绑定模块412,用于依据cpu绑定技术,对所述内存操作处理器进行亲缘性绑定。

需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于装置类实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本发明时可以把各单元的功能在同一个或多个软件和/或硬件中实现。

通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例或者实施例的某些部分所述的方法。

以上对本发明所提供的一种共享内存的访问方法及系统进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

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