CN113419871B - 基于同步槽的对象处理方法及相关产品 - Google Patents
基于同步槽的对象处理方法及相关产品 Download PDFInfo
- Publication number
- CN113419871B CN113419871B CN202110694799.9A CN202110694799A CN113419871B CN 113419871 B CN113419871 B CN 113419871B CN 202110694799 A CN202110694799 A CN 202110694799A CN 113419871 B CN113419871 B CN 113419871B
- Authority
- CN
- China
- Prior art keywords
- synchronization slot
- thread
- index value
- determining
- queue
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
Abstract
本申请实施例公开了一种基于同步槽的对象处理方法及相关产品,方法包括:响应于第一线程对于取同步槽的访问,根据第一线程确定预设队列集中包括的第一对象;响应于第二线程对于还同步槽的访问,确定第二线程持有的第二对象,将第二对象存储在预设队列集中。采用本申请实施例可实现多线程的动态访问,有利于提高对象的利用率。
Description
技术领域
本申请涉及数据处理技术领域,具体涉及一种基于同步槽的对象处理方法及相关产品。
背景技术
对象池可用于存储一定数量以及创建好的对象,具体可将对象存储于该对象池中以备下次使用。目前,可为对象池绑定线程,不同的线程对应有不同的对象池,可根据线程实现对对象的获取或者存储;但是针对上述方法,在多线程运行情况下,对象可能会在不同线程中移动,并且,在为对象池绑定线程以后,该对象池只能被该线程访问或者使用,会导致某一个对象池越来越大。因此,亟需一种方法能够有效解决上述问题。
发明内容
本申请实施例提供了一种基于同步槽的对象处理方法及相关产品,可实现多线程的动态访问,从而保证在高并发环境下,对于对象使用或者返还的有条不紊,有利于减轻对象池的压力,以防止某一队列占用内存越来越大的情况,从而,有利于提高对象的利用率。
第一方面,本申请实施例提供一种基于同步槽的对象处理方法,应用于基于同步槽的对象处理系统,所述系统包括取同步槽、还同步槽和预设队列集,其中,所述预设队列集包括多个队列,所述取同步槽和/或所述还同步槽用于索引所述预设队列集中的队列;所述方法包括:
响应于第一线程对于所述取同步槽的访问,根据所述第一线程确定预设队列集中包括的第一对象;
响应于第二线程对于所述还同步槽的访问,确定所述第二线程持有的第二对象,将所述第二对象存储在所述预设队列集中。
第二方面,本申请实施例提供一种基于同步槽的对象处理装置,所述装置应用于基于同步槽的对象处理系统,所述系统包括取同步槽、还同步槽和预设队列集,其中,所述预设队列集包括多个队列,所述取同步槽和/或所述还同步槽用于索引所述预设队列集中的队列;所述装置包括:确定单元和存储单元,其中,
所述确定单元,用于响应于第一线程对于所述取同步槽的访问,根据所述第一线程确定预设队列集中包括的第一对象;
所述存储单元,用于响应于第二线程对于所述还同步槽的访问,确定所述第二线程持有的第二对象,将所述第二对象存储在所述预设队列集中。
第三方面,本申请实施例提供一种电子设备,包括处理器、存储器、通信接口以及一个或多个程序,其中,上述一个或多个程序被存储在上述存储器中,并且被配置由上述处理器执行,上述程序包括用于执行本申请实施例第一方面任一方法中的步骤的指令。
第四方面,本申请实施例提供了一种计算机可读存储介质,其中,上述计算机可读存储介质存储用于电子数据交换的计算机程序,其中,上述计算机程序使得计算机执行如本申请实施例第一方面任一方法中所描述的部分或全部步骤。
第五方面,本申请实施例提供了一种计算机程序产品,其中,上述计算机程序产品包括存储了计算机程序的非瞬时性计算机可读存储介质,上述计算机程序可操作来使计算机执行如本申请实施例第一方面任一方法中所描述的部分或全部步骤。该计算机程序产品可以为一个软件安装包。
可以看出,本申请实施例中所描述的基于同步槽的对象处理方法,应用于基于同步槽的对象处理系统,该系统包括取同步槽、还同步槽和预设队列集,其中,预设队列集包括多个队列,取同步槽和/或还同步槽用于索引预设队列集中的队列;取同步槽,用于响应于第一线程对于取同步槽的访问,根据第一线程确定预设队列集中包括的第一对象;还同步槽,用于响应于第二线程对于还同步槽的访问,确定第二线程持有的第二对象,将第二对象存储在预设队列集中。如此,可根据取同步槽和还同步槽,索引到不用线程对应的队列中,通过多线程的访问实现对于对象的取用和存储;可实现多线程的动态访问,从而保证在高并发环境下,对于对象使用或者返还的有条不紊,有利于减轻队列的压力,以防止某一队列占用内存越来越大的情况,从而,有利于减轻对象池压力,有利于提高对象的利用率。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1A是本申请实施例提供的一种基于同步槽的对象处理系统的架构示意图;
图1B是本申请实施例提供的一种基于同步槽的对象处理系统的结构示意图;
图2A是本申请实施例提供的一种基于同步槽的对象处理方法的流程示意图;
图2B是本申请实施例提供的一种同步槽的结构示意图;
图2C是本申请实施例提供的一种基于同步槽的对象处理方法的场景示意图;
图2D是本申请实施例提供的一种基于同步槽的对象处理方法的场景示意图;
图2E是本申请实施例提供的一种基于同步槽的对象处理方法的场景示意图;
图2F是本申请实施例提供的一种基于同步槽的对象处理方法的场景示意图;
图2G是本申请实施例提供的一种基于同步槽的对象处理方法的场景示意图;
图3是本申请实施例提供的一种电子设备的功能单元组成框图;
图4A是本申请实施例提供的一种基于同步槽的对象处理装置的功能单元组成框图;
图4B是本申请实施例提供的一种基于同步槽的对象处理装置的功能单元组成框图;
图4C是本申请实施例提供的一种基于同步槽的对象处理装置的功能单元组成框图。
具体实施方式
为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别不同对象,而不是用于描述特定顺序。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其他步骤或单元。
在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本申请的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。
1)对象,可指面向对象语言中类的实例。
2)对象池,对象的存储地方或者数据结构,当需要创建对象时不需要向系统申请内存重新创建,只需要从对象池中取出对应的对象,对象不需要的时候返回给对象池就可以了。
3)队列,是一种先进先出的数据结构,在本申请中,队列是用来存储对象的数据结构。
4)同步槽,一个数组结构,长度与队列组的长度一致,并且数组索引的值与队列一一对应,数组索引的值相当于队列的索引。在本申请中,同步是指取索引是同步的(在多线程环境下索引不会产生冲突或者叫线程安全的)。
5)电子设备可以是还包含其它功能诸如个人数字助理和/或音乐播放器功能的便携式电子设备,诸如手机、平板电脑、具备无线通讯功能的可穿戴电子设备(如智能手表)等。便携式电子设备的示例性实施例包括但不限于搭载IOS系统、Android系统、Microsoft系统或者其它操作系统的便携式电子设备。上述便携式电子设备也可以是其它便携式电子设备,诸如膝上型计算机(Laptop)等。还应当理解的是,在其他一些实施例中,上述电子设备也可以不是便携式电子设备,而是台式计算机。该电子设备还可以是服务器等,在此不作限定。
图1A示出了本申请所适用的基于同步槽的对象处理系统的架构示意图,如图1A所示,该架构示意图中包括对象池100,对象池100包括至少一个同步槽以及预设队列集,该同步槽可包取同步槽和还同步槽,该预设队列集中可包括多个队列(Q0、Q1、Q2…)。
其中,上述取同步槽与还同步槽的槽长度是相同的,取同步槽和/或还同步槽的槽长度与预设队列集包括的多个队列对应的队列数是一一对应的。
其中,上述取同步槽和/或所述还同步槽用于索引所述预设队列集中的队列。
其中,上述预设队列集中包括多个队列,每一队列可用于存储对象。
可见,在本申请实施例中,响应于第一线程对于取同步槽的访问,根据第一线程确定预设队列集中包括的第一对象,响应于第二线程对于还同步槽的访问,确定第二线程持有的第二对象,将第二对象存储在预设队列集中。如此,可根据取同步槽和还同步槽,索引到不用线程对应的队列中,通过多线程的访问实现对于对象的取用和存储;可实现多线程的动态访问,从而保证在高并发环境下,对于对象使用或者返还的有条不紊,有利于减轻队列的压力,以防止某一队列占用内存越来越大的情况,从而,有利于提高对象的利用率。
请参阅图1B,图1B是本申请实施例提供了一种基于同步槽的对象处理系统的结构示意图,应用于电子设备,该系统可包括对象池,该对象池中包括取同步槽、还同步槽和预设队列集,其中,所述预设队列集包括多个队列,所述取同步槽和/或所述还同步槽用于索引所述预设队列集中的队列;
所述取同步槽,用于响应于第一线程对于所述取同步槽的访问,根据所述第一线程确定所述预设队列集中包括的第一对象;
所述还同步槽,用于响应于第二线程对于所述还同步槽的访问,确定所述第二线程持有的第二对象,将所述第二对象存储在所述预设队列集中。
在一种可能的示例中,所述第一线程与所述第二线程相同或不同。
在一种可能的示例中,所述根据所述第一线程确定预设队列集中包括的第一对象方面,所述取同步槽具体可用于:以预设方式返回第一索引值;从所述预设队列集中确定所述第一索引值对应的队列为第一队列;从所述第一队列的队首确定所述第一对象。
在一种可能的示例中,在所述根据第一线程确定第一队列中包括的第一对象之后,所述取同步槽具体还用于:判断所述第一对象是否为空;若所述第一对象为空,则通过所述第一线程重新创建所述第一队列对应的对象为目标对象,并返回所述目标对象于所述第一线程;若所述第一对象不为空,则返回所述第一对象于所述第一线程。
在一种可能的示例中,所述取同步槽具体还用于:确定所述取同步槽的长度;在返回所述第一索引值之后,根据所述取同步槽的长度,更新所述第一索引值。
在一种可能的示例中,所述根据所述同步槽的长度,更新所述第一索引值方面,所述取同步槽具体用于:若在返回所述第一索引值之前,确定所述第一索引值为所述取同步槽中最后一个元素对应的索引值,则在返回所述第一索引值之后,更新所述第一索引值为所述取同步槽中的起始索引值,所述起始索引值为所述取同步槽中第一个元素;若在返回所述第一索引值之前,确定所述第一索引值不为所述取同步槽中最后一个元素对应的索引值,则更新所述第一索引值为所述第一索引值的下一位。
在一种可能的示例中,所述确定所述第二线程持有的第二对象,将所述第二对象存储在所述预设队列集中方面,所述还同步槽具体用于:确定所述还同步槽对应的第二索引值;从所述预设队列集中确定所述第二索引值对应的第二队列;将所述第二对象插入所述第二队列中;若所述第二对象插入失败,则删除所述第二对象。
可见,本申请实施例所描述的基于同步槽的对象处理系统,可包括系统包括取同步槽、还同步槽和预设队列集,其中,预设队列集包括多个队列,取同步槽和/或还同步槽用于索引预设队列集中的队列;取同步槽,用于响应于第一线程对于取同步槽的访问,根据第一线程确定预设队列集中包括的第一对象;还同步槽,用于响应于第二线程对于还同步槽的访问,确定第二线程持有的第二对象,将第二对象存储在预设队列集中。如此,可根据取同步槽和还同步槽,索引到不用线程对应的队列中,通过多线程的访问实现对于对象的取用和存储;可实现多线程的动态访问,从而保证在高并发环境下,对于对象使用或者返还的有条不紊,有利于减轻队列的压力,以防止某一队列占用内存越来越大的情况,从而,有利于提高对象的利用率。
与上述图1B所示的实施例一致地,请参阅图2A,图2A是本申请实施例提供的一种基于同步槽的对象处理方法的流程示意图,所述方法应用于电子设备,所述电子设备可包括基于同步槽的对象处理系统,所述系统包括取同步槽、还同步槽和预设队列集,其中,所述预设队列集包括多个队列,所述取同步槽和/或所述还同步槽用于索引所述预设队列集中的队列;上述方法包括。
S201、响应于第一线程对于所述取同步槽的访问,根据所述第一线程确定预设队列集中包括的第一对象。
S202、响应于第二线程对于所述还同步槽的访问,确定所述第二线程持有的第二对象,将所述第二对象存储在所述预设队列集中。
其中,在本申请实施例中,上述对象池中可包括一个取同步槽和一个还同步槽,当然,在本申请实施例中,不限于上述一个取同步槽和一个还同步槽,也可包括两个或两个以上的取同步槽和/或还同步槽,在此不作限定。
其中,上述取同步槽用于取出预设队列集中任意一个队列中存储的对象。
其中,上述还同步槽用于存入或者存储对象至预设队列集中任意一个队列中。
其中,上述取同步槽或/与还同步槽可同时支持多个线程的访问,并且,在一个对象池中,取同步槽与还同步槽的长度是相同的,其长度与预设队列集中包括的队列个数相同。
其中,如图2B所示,为一种同步槽的结构示意图,该同步槽可包括取同步槽或者还同步槽,如图所示,该同步槽的长度为a,索引数由0到a-1;该同步槽的长度可根据预设队列集中队列个数确定,即在该同步槽所在对象池中,有a个队列。
其中,上述取同步槽和/或还同步槽可用于索引同一对象池中的预设队列集中的队列。
其中,上述预设队列集可为用户自行设定或者系统默认,在此不作限定;处于同一对象池中的队列可为同一类型,在本申请中,也应用于多个对象池,每一对象池可对应有不同类型的对象,每一对象池的结构可相同,均可包括取同步槽和还同步槽。
其中,上述第一线程和/或第二线程可用于访问对象池,具体可用于获取、返还或者存储对象。上述第一线程和第二线程可并行处理或者串行处理,可根据具体的应用场景进行分类。
在一种可能的示例中,所述第一线程与所述第二线程相同或不同。
其中,一般情况下,响应于第一线程的访问,电子设备可通过取同步槽确定预设队列集中包括的第一对象,并取出该预设队列集中包括的第一对象于用户,在用户使用完毕以后,可继续通过该第一线程返还上述第一对象,若此时第一线程没有多余空间或者其他情况去返还该第一对象时,可由其他线程完成对于该第一对象的返还以及存储,这种情况下,表明该第一对象出现了漂移现象。
其中,上述第二线程与上述第一线程相同时,可分为两种情况,即第二对象与第一对象相同,或者第二对象与第一对象不同。
具体实现中,当第二对象与第一对象相同时,此时电子设备可能响应于第一线程对于取同步槽的访问,根据第一线程确定预设队列中的队列,并取出该队列中的第一对象,在用完该对象并返还该第一对象时,仍旧可通过该第一线程实现对该第一对象的返还,并存储到预设队列集的任意一个队列中;针对另一种情况,即第一对象与第二对象不同时,那么,可能第一线程在取出第一对象以后,第一对象发生了漂移现象,即由其他线程完成对第一对象的返还,该第一线程此时可能也会接受其他的对象,即第二对象,并完成对于该第二对象的返还或者存储。
举例来说,如图2C所示,为一种基于同步槽的对象处理的场景示意图,如图所示,可通过第一线程实现对第一对象的取出以及返还或者存储;如图2D所示,为一种基于同步槽的对象处理的场景示意图,可通过第一线程实现对于第一对象的取出,若第一对象出现漂移现象,则由第二线程完成对于第一对象的存储或者返还,在这种情况下,第一线程与第二线程可为串行处理方式;如图2E所示,为一种基于同步槽的对象处理的场景示意图,可由第一线程完成对于第一对象的取出或者获取或者确定,由第二线程完成对于第二对象的存储或者返还,上述第一线程与第二线程可为并行处理方式。
其中,上述第二线程可与上述第一线程不同,也可分为两种情况,即第二对象与第一对象相同,或者第二对象与第一对象不同。
具体实现中,若上述第二对象与第一对象相同,即表明在返还该第一对象时,发生了第一对象漂移现象,即由其他线程(第二线程)返还该第一对象。若第二对象与上述第一对象不同,即表明第一对象或者第二对象均发生漂移现象,或者均为发生漂移现象。
可见,在本申请中,相对于取出对象的线程来说,当返回该对象发生漂移现象时,仍旧可由其他线程完成对于该对象的存储以及返还,在高并发、异步化的情况下,可解决对象在不同线程之间进行移动而发生对象漂移的情况,如此,可实现对象被其他线程使用,有利于提高对象存储的成功率,有利于提高对象利用率。
在一种可能的示例中,所述根据所述第一线程确定预设队列集中包括的第一对象方面,上述方法可包括如下步骤:以预设方式返回第一索引值;从所述预设队列集中确定所述第一索引值对应的队列为第一队列;从所述第一队列的队首确定所述第一对象。
其中,上述预设方式可为用户自行设置或者系统默认,在此不作限定;该预设方式可指返回上述索引值的方式,具体可包括原子性方式,即该上述第一线程对应的操作是不可中断的,一旦开始该第一线程,则不会受到其他线程的干扰,采用该方式不存在并发冲突的情况。
具体实现中,电子设备可通过取同步槽原子性的返回当前取同步槽对应的当前索引值,即第一索引值,并根据该第一索引值,从预设队列集中选取与该第一索引值对应的队列为第一队列,基于队列先进先出的原则,确定第一队列的队首为第一线程所需要的第一对象。
在一种可能的示例中,在所述根据第一线程确定第一队列中包括的第一对象之后,上述方法还可包括如下步骤:判断所述第一对象是否为空;若所述第一对象为空,则重新创建所述第一队列对应的对象为目标对象,并返回所述目标对象于所述第一线程;若所述第一对象不为空,则返回所述第一对象于所述第一线程。
具体实现中,在确定上述第一对象以后,可对该第一对象进行一次评判,以确定该第一对象是否可用,从而以确定是否需要返回该第一对象到第一线程;具体地,可判断该第一对象是否为空,如果该第一对象为空,则表明该第一队列中无对象可取,那么,可重新创建一个新的对象为目标对象,并将该目标对象返回至第一线程;若该第一对象不为空,可直接返回该第一对象。如此,可通过取同步槽完成对于第一对象的获取,当第一线程不再使用该第一对象时,可向该对象池返回该第一对象。
可选地,在本申请实施例中,可由第一线程去完成对于新的对象的创建,也可以由其他线程完成对于新的对象的创建,具体的在此不作限定;例如,可事先单独建立一个新的线程,该线程不同于上述第一线程,该线程可用于创建对象,那么,可通过该线程去完成新的对象的创建,并在创建完成以后,可通过该线程将新的对象发送于第一线程或者取同步槽。
可见,在本申请中,可通过取同步槽完成对于不同线程所用对象的索引,可实现多线程的访问,从而保证在高并发环境下,多个线程中每一线程均能实现对于对象的取用,从而,有利于提高对象的利用率,以防止存在频繁调用某一队列或者某一线程,有利于节省内存空间。
在一种可能的示例中,上述方法还可包括如下步骤:确定所述取同步槽的长度;在返回所述第一索引值之后,根据所述取同步槽的长度,更新所述第一索引值。
其中,在本申请实施例中,当取同步槽根据第一索引值确定第一队列以后,可更新该取同步槽的当前索引值,以便于下一个线程对于该取同步槽的访问,如此,有利于实现对于各个队列的负载均衡,以避免造成某一队列的负载压力过大,有利于减轻队列的压力。
具体实现中,可确定取同步槽的长度a,并根据该长度a,确定当前索引位置,并根据当前索引位置,更新上述第一索引值。
在一种可能的示例中,所述根据所述同步槽的长度,更新所述第一索引值,上述方法还可包括如下步骤:若在返回所述第一索引值之前,确定所述第一索引值为所述取同步槽中最后一个元素对应的索引值,则在返回所述第一索引值之后,更新所述第一索引值为所述取同步槽中的起始索引值,所述起始索引值为所述取同步槽中第一个元素;若在返回所述第一索引值之前,确定所述第一索引值不为所述取同步槽中最后一个元素对应的索引值,则更新所述第一索引值为所述第一索引值的下一位。
其中,取同步槽中可包括多个位置,每一位置可对应一个元素,每一元素可对应一个索引值。
具体实现中,若同步槽的长度为a,则最后一个索引值为a-1;在返回上述第一索引值之后,可直接将第一索引值(当前索引值)进行+1操作,若在返回上述第一索引值之前,上述第一索引值为取同步槽中最后一个元素对应的位置时,即为a-1,此时,在返回上述第一索引值以后,可重新计数取同步槽的索引,并更新上述当前索引值为起始索引值,即0,其中,上述起始索引值为取同步槽中第一个元素。
进一步地,若在返回上述第一索引值前,确定上述第一索引值不为上述取同步槽中最后一个元素,则直接执行上述将第一索引值(当前索引值)进行+1的操作,即更新该第一索引值为其对应位置的下一位。
举例来说,如图2F所示,为一种基于同步槽的对象处理方法的场景示意图,如图中实线箭头位置所示,为第一索引值的位置,响应于第一线程对于取同步槽的访问,根据图中位置,可确定第一索引值为2,可返回当前对应的第一索引值为2,那么,可根据该第一索引值确定第一队列为Q2,如图中虚线位置所示,与此同时,可在返回第一索引值2以后,将该第一索引值更新为3。如图2G所示,为一种基于同步槽的对象处理方法的场景示意图,第一线程对于取同步槽的访问,此时,如实线位置所示,若取同步槽中返回的第一索引值为a-1,已经是取同步槽的最后一个元素,那么在返回上述a-1以后,如虚线位置所示,则更新该第一索引值为起始索引值,即为0,以便于下一次其他线程访问或者获取到对应的对象。
可见,在本申请中,可通过取同步槽实现对队列的索引,并在索引完成以后,自动动态更新该取同步槽对应的索引值,在下一次被其他线程访问时,可通过更新以后的索引确定其他队列,从而,实现对于队列的负载均衡控制,有利于避免重复访问同一线程的情况,有利于减轻单个线程的压力。
在一种可能的示例中,所述确定所述第二线程持有的第二对象,将所述第二对象存储在所述预设队列集中,上述方法还可包括如下步骤:确定所述还同步槽对应的第二索引值;从所述预设队列集中确定所述第二索引值对应的第二队列;将所述第二对象插入所述第二队列中;若所述第二对象插入失败,则删除所述第二对象。
其中,当还同步槽接收到第二线程的访问,可确定还同步槽当前对应的第二索引值,并根据该第二索引值,完成对于第二对象的存储。
具体实现中,可通过上述第二索引值,从多个队列中索引到第二队列,并在第二队列的队尾将上述第二对象插入该第二队列中,若第二队列中还存在插入空间,则会插入成功,则可完成对于第二对象的存储;反之,则会插入失败,则表明该第二队列已满,没有其他空间可用于存储该第二对象,由于返还该第二对象仍旧是原子性方式,则可删除该第二对象,具体可直接销毁或者丢弃,以回收该对象,节省被占用内存空间。
可选地,在具体实现中,对于c/c++这种无垃圾(内存)回收的语言来说,就是把对象所占用的内存释放或者删除(free或delete)回给系统;对于java/go等有垃圾(内存)回收的语言来说,当对象所占用的内存不再使用时,有对应的垃圾回收器对这块内存进行回收(返回给虚拟机或者系统)。
可见,采用本申请实施例中,有利于解决内存对象频繁的创建与回收,而导致回收时间过长,占用内存过大的情况发生,只在队列没有足够空间时,对该对象进行回收,即在索引以后,队列中没有足够空间存储上述对象时,直接删除或者丢弃,有利于节省系统的内存空间。
可选地,与上述取同步槽一致地,在还同步槽返回上述第二索引值以后,可对该还同步槽对应的当前索引值(第二索引值)进行更新,更新方式与上述取同步槽一致,再次不再赘述。
可以看出,通过本申请实施例所描述的基于同步槽的对象处理方法,可响应于第一线程对于所述取同步槽的访问,根据所述第一线程确定预设队列集中包括的第一对象;响应于第二线程对于所述还同步槽的访问,确定所述第二线程持有的第二对象,将所述第二对象存储在所述预设队列集中。如此,可根据取同步槽和还同步槽,索引到不用线程对应的队列中,通过多线程的访问实现对于对象的取用和存储;可实现多线程的动态访问,从而保证在高并发环境下,对于对象使用或者返还的有条不紊,有利于减轻队列的压力,以防止某一队列占用内存越来越大的情况,从而,有利于提高对象的利用率。
与上述图1B所示的实施例一致地,请参阅图3,图3是本申请实施例提供的一种电子设备的结构示意图,如图所示,该电子设备包括处理器、存储器、通信接口以及一个或多个程序,所述电子设备包括基于同步槽的对象处理系统,所述系统包括取同步槽、还同步槽和预设队列集,其中,所述预设队列集包括多个队列,所述取同步槽和/或所述还同步槽用于索引所述预设队列集中的队列;其中,上述一个或多个程序被存储在上述存储器中,并且被配置由上述处理器执行,上述程序包括用于执行以下步骤的指令:
响应于第一线程对于所述取同步槽的访问,根据所述第一线程确定预设队列集中包括的第一对象;
响应于第二线程对于所述还同步槽的访问,确定所述第二线程持有的第二对象,将所述第二对象存储在所述预设队列集中。
可以看出,本申请实施例中所描述的电子设备,可响应于第一线程对于所述取同步槽的访问,根据所述第一线程确定预设队列集中包括的第一对象;响应于第二线程对于所述还同步槽的访问,确定所述第二线程持有的第二对象,将所述第二对象存储在所述预设队列集中。如此,可根据取同步槽和还同步槽,索引到不用线程对应的队列中,通过多线程的访问实现对于对象的取用和存储;可实现多线程的动态访问,从而保证在高并发环境下,对于对象使用或者返还的有条不紊,有利于减轻队列的压力,以防止某一队列占用内存越来越大的情况,从而,有利于提高对象的利用率。
在一个可能的示例中,所述第一线程与所述第二线程相同或不同。
在一个可能的示例中,在所述根据所述第一线程确定预设队列集中包括的第一对象方面,上述程序包括用于执行以下步骤的指令:
以预设方式返回第一索引值;
从所述预设队列集中确定所述第一索引值对应的队列为第一队列;
从所述第一队列的队首确定所述第一对象。
在一个可能的示例中,在所述根据第一线程确定第一队列中包括的第一对象之后,上述程序包括用于执行以下步骤的指令:
判断所述第一对象是否为空;
若所述第一对象为空,则重新创建所述第一队列对应的对象为目标对象,并返回所述目标对象于所述第一线程;
若所述第一对象不为空,则返回所述第一对象于所述第一线程。
在一个可能的示例中,上述程序还包括用于执行以下步骤的指令:
确定所述取同步槽的长度;
在返回所述第一索引值之后,根据所述取同步槽的长度,更新所述第一索引值。
在一个可能的示例中,在所述根据所述同步槽的长度,更新所述第一索引值方面,上述程序包括用于执行以下步骤的指令:
若在返回所述第一索引值之前,确定所述第一索引值为所述取同步槽中最后一个元素对应的索引值,则在返回所述第一索引值之后,更新所述第一索引值为所述取同步槽中的起始索引值,所述起始索引值为所述取同步槽中第一个元素;
若在返回所述第一索引值之前,确定所述第一索引值不为所述取同步槽中最后一个元素对应的索引值,则更新所述第一索引值为所述第一索引值的下一位。
在一个可能的示例中,在所述确定所述第二线程持有的第二对象,将所述第二对象存储在所述预设队列集中方面,上述程序包括用于执行以下步骤的指令:
确定所述还同步槽对应的第二索引值;
从所述预设队列集中确定所述第二索引值对应的第二队列;
将所述第二对象插入所述第二队列中;
若所述第二对象插入失败,则删除所述第二对象。
上述主要从方法侧执行过程的角度对本申请实施例的方案进行了介绍。可以理解的是,电子设备为了实现上述功能,其包含了执行各个功能相应的硬件结构和/或软件模块。本领域技术人员应该很容易意识到,结合本文中所提供的实施例描述的各示例的单元及算法步骤,本申请能够以硬件或硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
本申请实施例可以根据上述方法示例对电子设备进行功能单元的划分,例如,可以对应各个功能划分各个功能单元,也可以将两个或两个以上的功能集成在一个处理单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。需要说明的是,本申请实施例中对单元的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。
在采用对应各个功能划分各个功能模块的情况下,图4A示出了基于同步槽的对象处理装置的示意图,如图4A所示,该基于同步槽的对象处理装置400应用于电子设备,该电子设备包括基于同步槽的对象处理系统,所述系统包括取同步槽、还同步槽和预设队列集,其中,所述预设队列集包括多个队列,所述取同步槽和/或所述还同步槽用于索引所述预设队列集中的队列;该基于同步槽的对象处理装置400可以包括:确定单元401和存储单元402,其中,
确定单元401可以用于支持电子设备执行上述步骤S201,和/或用于本文所描述的技术的其他过程。
存储单元402可以用于支持电子设备执行上述步骤S202,和/或用于本文所描述的技术的其他过程。
可见,在本申请实施例提供的基于同步槽的对象处理装置,可响应于第一线程对于所述取同步槽的访问,根据所述第一线程确定预设队列集中包括的第一对象;响应于第二线程对于所述还同步槽的访问,确定所述第二线程持有的第二对象,将所述第二对象存储在所述预设队列集中。如此,可根据取同步槽和还同步槽,索引到不用线程对应的队列中,通过多线程的访问实现对于对象的取用和存储;可实现多线程的动态访问,从而保证在高并发环境下,对于对象使用或者返还的有条不紊,有利于减轻队列的压力,以防止某一队列占用内存越来越大的情况,从而,有利于提高对象的利用率。
在一个可能的示例中,在所述根据所述第一线程确定预设队列集中包括的第一对象方面,上述确定单元401具体用于:
以预设方式返回第一索引值;
从所述预设队列集中确定所述第一索引值对应的队列为第一队列;
从所述第一队列的队首确定所述第一对象。
在一个可能的示例中,在所述根据第一线程确定第一队列中包括的第一对象之后,如图4B所示,为基于同步槽的对象处理装置的示意图,该基于同步槽的对象处理装置400还可以包括:判断单元403和返回单元404,其中,
所述判断单元403,用于判断所述第一对象是否为空;
所述返回单元404,用于若所述第一对象为空,则重新创建所述第一队列对应的对象为目标对象,并返回所述目标对象于所述第一线程;
所述返回单元404,还用于若所述第一对象不为空,则返回所述第一对象于所述第一线程。
在一个可能的示例中,如图4C所示,为基于同步槽的对象处理装置的示意图,该基于同步槽的对象处理装置400还可以包括:更新单元405,其中,
所述确定单元401,还用于确定所述取同步槽的长度;
所述更新单元405,用于在返回所述第一索引值之后,根据所述取同步槽的长度,更新所述第一索引值。
在一个可能的示例中,在所述根据所述同步槽的长度,更新所述第一索引值方面,上述更新单元405具体用于:
若在返回所述第一索引值之前,确定所述第一索引值为所述取同步槽中最后一个元素对应的索引值,则在返回所述第一索引值之后,更新所述第一索引值为所述取同步槽中的起始索引值,所述起始索引值为所述取同步槽中第一个元素;
若在返回所述第一索引值之前,确定所述第一索引值不为所述取同步槽中最后一个元素对应的索引值,则更新所述第一索引值为所述第一索引值的下一位。
在一个可能的示例中,在所述确定所述第二线程持有的第二对象,将所述第二对象存储在所述预设队列集中方面,上述存储单元402具体用于:
确定所述还同步槽对应的第二索引值;
从所述预设队列集中确定所述第二索引值对应的第二队列;
将所述第二对象插入所述第二队列中;
若所述第二对象插入失败,则删除所述第二对象。
需要说明的是,上述方法实施例涉及的各步骤的所有相关内容均可以援引到对应功能模块的功能描述,在此不再赘述。
本实施例提供的电子设备,用于执行上述基于同步槽的对象处理方法,因此可以达到与上述实现方法相同的效果。
在采用集成的单元的情况下,电子设备可以包括处理模块、存储模块和通信模块。其中,处理模块可以用于对电子设备的动作进行控制管理,例如,可以用于支持电子设备执行上述确定单元401和存储单元402执行的步骤。存储模块可以用于支持电子设备执行存储程序代码和数据等。通信模块,可以用于支持电子设备与其他设备的通信。
其中,处理模块可以是处理器或控制器。其可以实现或执行结合本申请公开内容所描述的各种示例性的逻辑方框,模块和电路。处理器也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,数字信号处理(digital signal processing,DSP)和微处理器的组合等等。存储模块可以是存储器。通信模块具体可以为射频电路、蓝牙芯片、Wi-Fi芯片等与其他电子设备交互的设备。
本申请实施例还提供一种计算机存储介质,其中,该计算机存储介质存储用于电子数据交换的计算机程序,该计算机程序使得计算机执行如上述方法实施例中记载的任一方法的部分或全部步骤,上述计算机包括电子设备。
本申请实施例还提供一种计算机程序产品,上述计算机程序产品包括存储了计算机程序的非瞬时性计算机可读存储介质,上述计算机程序可操作来使计算机执行如上述方法实施例中记载的任一方法的部分或全部步骤。该计算机程序产品可以为一个软件安装包,上述计算机包括电子设备。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置,可通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如上述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性或其它的形式。
上述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
上述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储器中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储器中,包括若干指令用以使得一台计算机设备(可为个人计算机、电子设备或者网络设备等)执行本申请各个实施例上述方法的全部或部分步骤。而前述的存储器包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储器中,存储器可以包括:闪存盘、只读存储器(英文:Read-Only Memory,简称:ROM)、随机存取器(英文:Random Access Memory,简称:RAM)、磁盘或光盘等。
以上对本申请实施例进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。
Claims (9)
1.一种基于同步槽的对象处理方法,其特征在于,所述方法应用于基于同步槽的对象处理系统,所述系统包括取同步槽、还同步槽和预设队列集,其中,所述预设队列集包括多个队列,所述取同步槽和/或所述还同步槽用于索引所述预设队列集中的队列;所述方法包括:
响应于第一线程对于所述取同步槽的访问,根据所述第一线程确定所述预设队列集中包括的第一对象;
响应于第二线程对于所述还同步槽的访问,确定所述第二线程持有的第二对象,将所述第二对象存储在所述预设队列集中,其中,所述第一线程与所述第二线程相同或不同,所述取同步槽或/与所述还同步槽用于同时支持多个线程的访问;
若所述第一对象与所述第二对象不同,且所述第一对象发生漂移现象,则通过其他线程完成对所述第一对象的返还。
2.根据权利要求1所述的方法,其特征在于,所述根据所述第一线程确定所述预设队列集中包括的第一对象,包括:
以预设方式返回第一索引值;
从所述预设队列集中确定所述第一索引值对应的队列为第一队列;
从所述第一队列的队首确定所述第一对象。
3.根据权利要求2所述的方法,其特征在于,在所述根据第一线程确定第一队列中包括的第一对象之后,所述方法还包括:
判断所述第一对象是否为空;
若所述第一对象为空,则重新创建所述第一队列对应的对象为目标对象,并返回所述目标对象于所述第一线程;
若所述第一对象不为空,则返回所述第一对象于所述第一线程。
4.根据权利要求2所述的方法,其特征在于,所述方法还包括:
确定所述取同步槽的长度;
在返回所述第一索引值之后,根据所述取同步槽的长度,更新所述第一索引值。
5.根据权利要求4所述的方法,其特征在于,所述根据所述同步槽的长度,更新所述第一索引值,包括:
若在返回所述第一索引值之前,确定所述第一索引值为所述取同步槽中最后一个元素对应的索引值,则在返回所述第一索引值之后,更新所述第一索引值为所述取同步槽中的起始索引值,所述起始索引值为所述取同步槽中第一个元素;
若在返回所述第一索引值之前,确定所述第一索引值不为所述取同步槽中最后一个元素对应的索引值,则更新所述第一索引值为所述第一索引值的下一位。
6.根据权利要求1所述的方法,其特征在于,所述确定所述第二线程持有的第二对象,将所述第二对象存储在所述预设队列集中,包括:
确定所述还同步槽对应的第二索引值;
从所述预设队列集中确定所述第二索引值对应的第二队列;
将所述第二对象插入所述第二队列中;
若所述第二对象插入失败,则删除所述第二对象。
7.一种基于同步槽的对象处理装置,其特征在于,所述装置应用于基于同步槽的对象处理系统,所述系统包括取同步槽、还同步槽和预设队列集,其中,所述预设队列集包括多个队列,所述取同步槽和/或所述还同步槽用于索引所述预设队列集中的队列;所述装置包括:确定单元和存储单元,其中,
所述确定单元,用于响应于第一线程对于所述取同步槽的访问,根据所述第一线程确定预设队列集中包括的第一对象;
所述存储单元,用于响应于第二线程对于所述还同步槽的访问,确定所述第二线程持有的第二对象,将所述第二对象存储在所述预设队列集中,其中,所述第一线程与所述第二线程相同或不同,所述取同步槽或/与所述还同步槽用于同时支持多个线程的访问;
若所述第一对象与所述第二对象不同,且所述第一对象发生漂移现象,则通过其他线程完成对所述第一对象的返还。
8.一种电子设备,其特征在于,包括处理器、存储器、通信接口,以及一个或多个程序,所述一个或多个程序被存储在所述存储器中,并且被配置由所述处理器执行,所述程序包括用于执行如权利要求1-6任一项所述的方法中的步骤的指令。
9.一种计算机可读存储介质,其特征在于,存储用于电子数据交换的计算机程序,其中,所述计算机程序使得计算机执行如权利要求1-6任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110694799.9A CN113419871B (zh) | 2021-06-21 | 2021-06-21 | 基于同步槽的对象处理方法及相关产品 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110694799.9A CN113419871B (zh) | 2021-06-21 | 2021-06-21 | 基于同步槽的对象处理方法及相关产品 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113419871A CN113419871A (zh) | 2021-09-21 |
CN113419871B true CN113419871B (zh) | 2023-01-31 |
Family
ID=77716201
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110694799.9A Active CN113419871B (zh) | 2021-06-21 | 2021-06-21 | 基于同步槽的对象处理方法及相关产品 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113419871B (zh) |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101599027A (zh) * | 2009-06-30 | 2009-12-09 | 中兴通讯股份有限公司 | 一种线程池管理方法及其系统 |
JP2010226275A (ja) * | 2009-03-23 | 2010-10-07 | Nec Corp | 通信装置および通信方法 |
CN106656863A (zh) * | 2016-12-31 | 2017-05-10 | 广东欧珀移动通信有限公司 | 业务监控方法、装置和计算机设备 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106658050B (zh) * | 2016-12-30 | 2020-02-21 | 北京奇虎科技有限公司 | 一种流数据的并发读写方法和装置 |
CN109542636B (zh) * | 2018-10-18 | 2020-12-25 | 新浪网技术(中国)有限公司 | 一种数据更新的方法及装置 |
-
2021
- 2021-06-21 CN CN202110694799.9A patent/CN113419871B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2010226275A (ja) * | 2009-03-23 | 2010-10-07 | Nec Corp | 通信装置および通信方法 |
CN101599027A (zh) * | 2009-06-30 | 2009-12-09 | 中兴通讯股份有限公司 | 一种线程池管理方法及其系统 |
CN106656863A (zh) * | 2016-12-31 | 2017-05-10 | 广东欧珀移动通信有限公司 | 业务监控方法、装置和计算机设备 |
Also Published As
Publication number | Publication date |
---|---|
CN113419871A (zh) | 2021-09-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108984264B (zh) | 虚拟gpu的实现方法、装置及系统 | |
US9898338B2 (en) | Network computer system and method for dynamically changing execution sequence of application programs | |
US9043806B2 (en) | Information processing device and task switching method | |
CN106648461A (zh) | 一种内存管理装置和方法 | |
CN110209493B (zh) | 内存管理方法、装置、电子设备及存储介质 | |
CN102667714B (zh) | 支持访问由操作系统环境外的资源提供的功能的方法和系统 | |
CN105683905A (zh) | 在多核心处理器中并行功能的高效率硬件分派及相关的处理器系统、方法及计算机可读媒体 | |
CN115016894A (zh) | 一种线程的内存访问方法、装置、设备及存储介质 | |
CN107451070B (zh) | 一种数据的处理方法和服务器 | |
CN113254223B (zh) | 一种系统重启后的资源分配方法、系统及相关组件 | |
CN114168301A (zh) | 线程调度方法、处理器以及电子装置 | |
CN112650449B (zh) | 缓存空间的释放方法、释放系统、电子设备及存储介质 | |
CN113419871B (zh) | 基于同步槽的对象处理方法及相关产品 | |
CN113377509A (zh) | 数据处理方法与系统 | |
CN111831451A (zh) | 云主机内存分配方法及云主机、设备及存储介质 | |
US9405470B2 (en) | Data processing system and data processing method | |
CN112631510B (zh) | 堆栈区域扩充的方法、装置及硬件平台 | |
CN110688223B (zh) | 数据处理方法及相关产品 | |
CN108563507A (zh) | 一种内存管理方法、装置、设备及可读存储介质 | |
CN108874560B (zh) | 进行通信的方法和通信设备 | |
CN113176896A (zh) | 一种基于单进单出无锁队列的随机取出对象的方法 | |
CN111737166A (zh) | 数据对象的处理方法、装置及设备 | |
CN112395083B (zh) | 一种资源文件的释放方法、装置和计算机可读存储介质 | |
US20220353874A1 (en) | Method and Apparatus for Maximizing a Number of Connections That Can Be Executed from a Mobile Application | |
CN114356589B (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |