CN111324438B - 请求的调度方法、装置、存储介质及电子设备 - Google Patents
请求的调度方法、装置、存储介质及电子设备 Download PDFInfo
- Publication number
- CN111324438B CN111324438B CN202010099172.4A CN202010099172A CN111324438B CN 111324438 B CN111324438 B CN 111324438B CN 202010099172 A CN202010099172 A CN 202010099172A CN 111324438 B CN111324438 B CN 111324438B
- Authority
- CN
- China
- Prior art keywords
- request
- thread
- working
- virtual
- 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
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/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
-
- 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本公开提供了一种请求的调度方法、装置、存储介质及电子设备,该方法包括:将第一请求散列至第一虚拟线程队列;检测第一虚拟线程队列中是否存在正在处理的请求;在第一虚拟线程队列中未存在正在处理的请求的情况下,确定第一工作线程处理第一请求。本公开通过在系统中设置大量的虚拟线程队列,减少在虚拟线程队列中请求排队的情况,避免请求之间冲突的情况发生,并且由于虚拟线程队列本身不占用系统的内存资源,可进一步降低对系统性能的影响。同时,虚拟线程队列为预先构造的虚拟队列,避免了动态修改映射的全局锁和资源竞争造成的性能退化。
Description
技术领域
本公开涉及计算机领域,特别涉及一种请求的调度方法、装置、存储介质及电子设备。
背景技术
主流服务器大多采用的是IO分离式的架构,即在一个服务器进程中运行两种线程,一组处理网络链接,负责把接受到的数据包拆成一个个请求并把请求的处理结果打包发送(称为IO线程),另一组则负责处理请求(称为工作worker线程)。显然,这种架构需要一个模块来把IO线程上产生的请求给转发到worker线程中进行处理,即调度器。对于调度器来说常见的实现方式有两种:
(1)根据请求中的包含的某些信息进行哈希运算,然后基于哈希值散列到不同的worker线程上;
(2)使用一个全局的映射(map)来保存请求间的冲突关系(比如两个操作同一个磁盘位置的请求一般希望不能同时执行),对于没有冲突的请求随机找一个worker线程执行。
对于上述两种方式来说,第一种在请求分布不均匀的情况下会造成某些worker线程上请求堆积的很多,而其他worker线程上则很少需要处理请求,这会明显加重长尾现象;对于第二种方式,则同时会有多个IO线程去修改这个map,即需要有一个全局锁在这里维护整个调度器的正常运行,而对于已失效的map元素的删除更加剧了这个锁的竞争,这些都会严重影响服务器的性能。因此,上述两种调度方式均会影响调度逻辑而使系统性能退化,影响使用者的使用体验。
发明内容
本公开实施例的目的在于提供一种请求的调度方法、装置、存储介质及电子设备,以解决现有技术中的调度方式影响调度逻辑而导致系统性能退化的问题。
为了解决上述技术问题,本公开的实施例采用了如下技术方案:一种请求的调度方法,包括:将第一请求散列至第一虚拟线程队列;检测所述第一虚拟线程队列中是否存在正在处理的请求;在所述第一虚拟线程队列中未存在正在处理的请求的情况下,确定第一工作线程处理所述第一请求。
进一步,所述将第一请求散列至第一虚拟线程队列,包括:根据所述第一请求操作的磁盘位置的ID确定所述第一请求的哈希值;根据所述哈希值确定所述第一虚拟线程队列,并将所述第一请求散列至所述第一虚拟线程队列。
进一步,所述检测所述第一虚拟线程队列中是否存在正在处理的请求,包括:检测所述第一虚拟线程队列是否存在处理标记;在所述第一虚拟线程队列存在所述处理标记的情况下,确定所述第一虚拟线程队列中存在正在处理的请求;在所述第一虚拟线程队列不存在所述处理标记的情况下,确定所述第一虚拟线程队列中未存在正在处理的请求。
进一步,所述确定第一工作线程处理所述第一请求,包括:在所有工作线程中随机选择至少两个工作线程;在所述随机选择的至少两个工作线程中,确定当前负载较小的工作线程为第一工作线程。
进一步,在所述确定第一工作线程处理所述第一请求之后,还包括:在所述第一请求处理完毕之后,检测所述第一虚拟线程队列中是否存在等待处理的第二请求;在所述第一虚拟线程队列中存在所述第二请求时,在所有所述工作线程中随机选取第二工作线程,其中,所述第二工作线程与所述第一工作线程不同;检测所述第二工作线程的当前负载是否小于所述第一工作线程的当前负载,且所述第二工作线程的当前负载与所述第一工作线程的当前负载之间的差值是否大于预设阈值;在所述第二工作线程的当前负载小于所述第一工作线程的当前负载,且所述第二工作线程的当前负载与所述第一工作线程的当前负载之间的差值大于预设阈值的情况下,将所述第二请求分配至所述第二工作线程进行处理;否则,将所述第二请求分配至所述第一工作线程进行处理。
本公开还提供了一种请求的调度装置,包括:散列模块,用于将第一请求散列至第一虚拟线程队列;第一检测模块,用于检测所述第一虚拟线程队列中是否存在正在处理的请求;确定模块,用于在所述第一虚拟线程队列中未存在正在处理的请求的情况下,确定第一工作线程处理所述第一请求。
进一步,所述散列模块,具体用于:根据所述第一请求操作的磁盘位置的ID确定所述第一请求的哈希值;根据所述哈希值确定所述第一虚拟线程队列,并将所述第一请求散列至所述第一虚拟线程队列。
进一步,所述第一检测模块,具体用于:检测所述第一虚拟线程队列是否存在处理标记;在所述第一虚拟线程队列存在所述处理标记的情况下,确定所述第一虚拟线程队列中存在正在处理的请求;在所述第一虚拟线程队列不存在所述处理标记的情况下,确定所述第一虚拟线程队列中未存在正在处理的请求。
进一步,所述确定模块,具体用于:在所有工作线程中随机选择至少两个工作线程;在所述随机选择的至少两个工作线程中,确定当前负载较小的工作线程为第一工作线程。
进一步,还包括:所述第一检测模块,还用于在所述第一请求处理完毕之后,检测所述第一虚拟线程队列中是否存在等待处理的第二请求;所述确定模块,还用于在所述第一虚拟线程队列中存在所述第二请求时,在所有所述工作线程中随机选取第二工作线程,其中,所述第二工作线程与所述第一工作线程不同;第二检测模块,用于检测所述第二工作线程的当前负载是否小于所述第一工作线程的当前负载,且所述第二工作线程的当前负载与所述第一工作线程的当前负载之间的差值是否大于预设阈值;所述确定模块,还用于在所述第二工作线程的当前负载小于所述第一工作线程的当前负载,且所述第二工作线程的当前负载与所述第一工作线程的当前负载之间的差值大于预设阈值的情况下,将所述第二请求分配至所述第二工作线程进行处理;否则,将所述第二请求分配至所述第一工作线程进行处理。
本公开实施例还提出一种存储介质,存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现上述任一项技术方案中所述方法的步骤。
本公开实施例还提出一种电子设备,至少包括存储器、处理器,所述存储器上存储有计算机程序,其特征在于,所述处理器在执行所述存储器上的计算机程序时实现上述任一项技术方案中所述方法的步骤。
本公开实施例的有益效果在于:通过在系统中设置大量的虚拟线程队列,减少在虚拟线程队列中请求排队的情况,避免请求之间冲突的情况发生,并且由于虚拟线程队列本身不占用系统的内存资源,可进一步降低对系统性能的影响。同时,虚拟线程队列为预先构造的虚拟队列,避免了动态修改映射的全局锁和资源竞争造成的性能退化。
附图说明
为了更清楚地说明本公开实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本公开中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本公开第一实施例中请求的调度方法的流程图;
图2为本公开第二实施例中请求的调度装置的结构示意图;
图3为本公开第二实施例中请求的调度装置的另一种结构示意图;
图4为本公开第四实施例中电子设备的结构示意图。
具体实施方式
此处参考附图描述本公开的各种方案以及特征。
应理解的是,可以对此处申请的实施例做出各种修改。因此,上述说明书不应该视为限制,而仅是作为实施例的范例。本领域的技术人员将想到在本公开的范围和精神内的其他修改。
包含在说明书中并构成说明书的一部分的附图示出了本公开的实施例,并且与上面给出的对本公开的大致描述以及下面给出的对实施例的详细描述一起用于解释本公开的原理。
通过下面参照附图对给定为非限制性实例的实施例的优选形式的描述,本公开的这些和其它特性将会变得显而易见。
还应当理解,尽管已经参照一些具体实例对本公开进行了描述,但本领域技术人员能够确定地实现本公开的很多其它等效形式,它们具有如权利要求所述的特征并因此都位于借此所限定的保护范围内。
当结合附图时,鉴于以下详细说明,本公开的上述和其他方面、特征和优势将变得更为显而易见。
此后参照附图描述本公开的具体实施例;然而,应当理解,所申请的实施例仅仅是本公开的实例,其可采用多种方式实施。熟知和/或重复的功能和结构并未详细描述以避免不必要或多余的细节使得本公开模糊不清。因此,本文所申请的具体的结构性和功能性细节并非意在限定,而是仅仅作为权利要求的基础和代表性基础用于教导本领域技术人员以实质上任意合适的详细结构多样地使用本公开。
本说明书可使用词组“在一种实施例中”、“在另一个实施例中”、“在又一实施例中”或“在其他实施例中”,其均可指代根据本公开的相同或不同实施例中的一个或多个。
本公开的第一实施例公开了一种请求的调度方法,主要应用于服务器或计算机系统等IO分离式架构中,其流程图如图1所示,主要包括步骤S101至S103:
S101,将第一请求散列至第一虚拟线程队列。
本实施例中的第一请求可以是服务器或计算机系统接收到的任意一个请求,或将接收到的数据包拆解后形成多个请求,上述多个请求中的任意一个请求均可以作为第一请求。第一请求在生成后,服务器或计算机系统会将第一请求散列至预先设置的大量的虚拟线程队列中的第一虚拟线程队列中,由第一虚拟线程队列作为过渡,在确定一具体的工作线程后,由该工作线程具体进行第一请求的处理。
具体地,在将第一请求散列至第一虚拟线程队列时,主要依据第一请求所要操作的磁盘位置进行确定,在计算机系统中,每个磁盘位置或文件块均具有唯一的编号ID,也可称为Key,每个请求中均携带有该请求将要进行操作的ID,因此在确定第一请求需要散列至的虚拟线程队列时,首先对第一请求中携带的其将要操作的磁盘位置的ID进行哈希计算,将得到的哈希值作为第一请求的哈希值,并根据哈希值在大量的虚拟线程队列中选择该哈希值对应的虚拟线程队列作为第一虚拟线程队列。在实际使用时,预先设置的虚拟线程队列的数量通常在万个以上,哈希值通常在计算得出后在虚拟线程队列的数量上进行取余计算,并根据余数的大小确定对应的虚拟线程队列,进而在多个请求所要操作的磁盘位置相同的情况下,上述多个请求在散列时会按照先后顺序被散列至同一虚拟线程队列中,以保证在同一时间只有一个请求可以对相应的磁盘位置进行操作,避免了请求冲突情况的发生。
S102,检测第一虚拟线程队列中是否存在正在处理的请求,若第一虚拟线程队列中不存在正在处理的请求,执行步骤S103,若第一虚拟线程队列中存在正在处理的请求,则在第一虚拟队列中等待。
S103,确定第一工作线程处理所述第一请求。
每个请求最终是需要被服务器或计算机系统的实体的工作(worker)线程进行处理的,而工作线程的数量有限,与虚拟线程队列无法做到一一对应的关系,因此每个虚拟线程队列中排队的请求,都有可能被任意一个工作线程执行处理。当工作线程在处理某一个请求时,会将当前正在处理的请求所归属的虚拟线程队列进行标记,以表示该虚拟线程队列中有正在处理的请求,且由于一个虚拟线程队列中所等待处理的请求通常为针对同一个磁盘位置的请求,为了防止有其他工作线程从该虚拟线程队列中获取请求处理,而造成该磁盘位置请求冲突的问题,工作线程通过标记的方式进行虚拟线程队列的锁定,防止请求冲突情况的产生。
进一步地,在第一请求被散列至第一虚拟线程队列后,并且在其被分配至工作线程进行处理执行之前,首先检测第一虚拟线程队列中是否有正在执行的请求,具体地,通过检测第一虚拟线程队列中是否存在处理标记来确定,在第一虚拟线程队列存在处理标记的情况下,确定第一虚拟线程队列中存在正在处理的请求,此时第一请求在第一虚拟队列中进行等待,直至处理标记被工作线程撤销;在第一虚拟线程队列不存在处理标记的情况下,说明当前第一虚拟线程队列中不存在正在处理的请求,第一请求可直接被分配工作线程以进行执行处理。
具体地,在第一虚拟线程队列中不存在正在处理的请求时,根据如下方式从工作线程中选择第一工作线程处理第一请求:首先在所有工作线程中随机选择至少两个工作线程,在上述随机选择出来的至少两个工作线程中,确定负载较小的工作线程为第一工作线程来处理第一请求,以确保第一请求可以尽快被处理,避免当前负载较大的工作线程需要等待较长时间才能进行第一请求的处理,加重长尾现象。
在实际使用时,需要进行处理的请求通常有多个,甚至存在针对同一个磁盘位置连续进行处理的情况出现,此时在同一虚拟线程队列中,可能存在多个请求需要进行处理,为了提升系统处理请求的性能,本实施例中还进行如下处理:以第一虚拟线程队列为例,在第一请求处理完毕后,可以进一步检测第一虚拟线程队列中是否存在等待处理的第二请求,其中,第二请求与第一请求在同一虚拟线程队列中排队等候,说明第二请求操作的磁盘位置与第一请求操作的磁盘位置相同;若第一虚拟线程队列中不存在等待处理的第二请求,则不进行其他操作,等待后续到达的请求进行分配即可;若第一虚拟线程队列中存在等待处理的第二请求,此时在所有线程中随机选择一个与第一工作线程不同的第二工作线程,检测第二工作线程的当前负载是否小于第一工作线程的当前负载,并且判断第二工作线程的当前负载与第一工作线程的当前负载之间的差值是否大于预设阈值,在上述两个条件之中的任意一个条件未达成时,依旧由第一工作线程继续处理第二请求,此时在系统缓存中存有第一工作线程在处理第一请求时的处理结果,基于系统缓存可以使第一工作线程在处理针对同一磁盘位置操作的第二请求时,直接获取第一请求的处理结果进行后续处理,可以提高系统的缓存利用率,增加第二请求的处理速度,降低长尾现象;在第二工作线程的当前负载小于第一工作线程的当前负载,且第二工作线程的当前负载与第一工作线程的当前负载之间的差值大于预设阈值的情况,即同时满足上述两个条件时,将第二请求分配至第二工作线程进行处理,此时第二工作线程的负载在一定程度上小于第一工作线程,且二者负载之间的差值会在较大程度上影响第二请求的处理速度,即便第一工作线程在利用缓存的情况下处理第二请求,其处理效率也会低于直接使用负载小的第二工作线程,此时使用第二工作线程的处理效率更高。
需要了解的是,检测第一虚拟线程队列中是否还存在等待处理的第二请求可以是第一工作线程主动进行的,并且工作线程在从虚拟线程队列取出一个请求进行处理时会在虚拟线程上创建一个处理标记证明该虚拟线程队列中存在正在处理的请求,当工作线程处理完毕该请求后,删除在虚拟线程上创建的处理标记,以便后续请求可继续被处理。
本实施例通过在系统中设置大量的虚拟线程队列,减少在虚拟线程队列中请求排队的情况,避免请求之间冲突的情况发生,并且由于虚拟线程队列本身不占用系统的内存资源,可进一步降低对系统性能的影响。同时,虚拟线程队列为预先构造的虚拟队列,避免了动态修改映射的全局锁和资源竞争造成的性能退化。并且,在本实施例的调度方式同时考虑了工作线程的负载和系统缓存的利用率,明显降低了长尾现象,提升了系统性能。
本公开的第二实施例公开了一种请求的调度装置,主要应用于服务器或计算机系统等IO分离式架构中,其结构示意图如图2所示,主要包括散列模块10,用于将第一请求散列至第一虚拟线程队列;第一检测模块20,与散列模块10耦合,用于检测第一虚拟线程队列中是否存在正在处理的请求;确定模块30,与第一检测模块20耦合,用于在第一虚拟线程队列中未存在正在处理的请求的情况下,确定第一工作线程处理第一请求。
本实施例中的第一请求可以是服务器或计算机系统接收到的任意一个请求,或将接收到的数据包拆解后形成多个请求,上述多个请求中的任意一个请求均可以作为第一请求。第一请求在生成后,散列模块10会将第一请求散列至预先设置的大量的虚拟线程队列中的第一虚拟线程队列中,由第一虚拟线程队列作为过渡,在确定模块30确定一具体的工作线程后,由该工作线程具体进行第一请求的处理。
具体地,在散列模块10将第一请求散列至第一虚拟线程队列时,主要依据第一请求所要操作的磁盘位置进行确定,在计算机系统中,每个磁盘位置或文件块均具有唯一的编号ID,也可称为Key,每个请求中均携带有该请求将要进行操作的ID,因此在散列模块10确定第一请求需要散列至的虚拟线程队列时,首先对第一请求中携带的其将要操作的磁盘位置的ID进行哈希计算,将得到的哈希值作为第一请求的哈希值,并根据哈希值在大量的虚拟线程队列中选择该哈希值对应的虚拟线程队列作为第一虚拟线程队列。在实际使用时,预先设置的虚拟线程队列的数量通常在万个以上,哈希值通常在计算得出后在虚拟线程队列的数量上进行取余计算,并根据余数的大小确定对应的虚拟线程队列,进而在多个请求所要操作的磁盘位置相同的情况下,上述多个请求在散列时会按照先后顺序被散列至同一虚拟线程队列中,以保证在同一时间只有一个请求可以对相应的磁盘位置进行操作,避免了请求冲突情况的发生。
每个请求最终是需要被服务器或计算机系统的实体的工作(worker)线程进行处理的,而工作线程的数量有限,与虚拟线程队列无法做到一一对应的关系,因此每个虚拟线程队列中排队的请求,都有可能被任意一个工作线程执行处理。当工作线程在处理某一个请求时,会将当前正在处理的请求所归属的虚拟线程队列进行标记,以表示该虚拟线程队列中有正在处理的请求,且由于一个虚拟线程队列中所等待处理的请求通常为针对同一个磁盘位置的请求,为了防止有其他工作线程从该虚拟线程队列中获取请求处理,而造成该磁盘位置请求冲突的问题,工作线程通过标记的方式进行虚拟线程队列的锁定,防止请求冲突情况的产生。
进一步地,在第一请求被散列至第一虚拟线程队列后,并且在其被分配至工作线程进行处理执行之前,第一检测模块20首先检测第一虚拟线程队列中是否有正在执行的请求,具体地,通过检测第一虚拟线程队列中是否存在处理标记来确定,在第一虚拟线程队列存在处理标记的情况下,确定第一虚拟线程队列中存在正在处理的请求,此时第一请求在第一虚拟队列中进行等待,直至处理标记被工作线程撤销;在第一虚拟线程队列不存在处理标记的情况下,说明当前第一虚拟线程队列中不存在正在处理的请求,第一请求可直接被分配工作线程以进行执行处理。
具体地,在第一虚拟线程队列中不存在正在处理的请求时,由确定模块30根据如下方式从工作线程中选择第一工作线程处理第一请求:首先在所有工作线程中随机选择至少两个工作线程,在上述随机选择出来的至少两个工作线程中,确定负载较小的工作线程为第一工作线程来处理第一请求,以确保第一请求可以尽快被处理,避免当前负载较大的工作线程需要等待较长时间才能进行第一请求的处理,加重长尾现象。
需要进行处理的请求通常有多个,甚至存在针对同一个磁盘位置连续进行处理的情况出现,此时在同一虚拟线程队列中,可能存在多个请求需要进行处理,为了提升系统处理请求的性能,本实施例中还进行如下处理:以第一虚拟线程队列为例,在第一请求处理完毕后,由第一检测模块20进一步检测第一虚拟线程队列中是否存在等待处理的第二请求,其中,第二请求与第一请求在同一虚拟线程队列中排队等候,说明第二请求操作的磁盘位置与第一请求操作的磁盘位置相同;若第一虚拟线程队列中不存在等待处理的第二请求,则不进行其他操作,等待后续到达的请求进行分配即可;若第一虚拟线程队列中存在等待处理的第二请求,此时由确定模块30在所有线程中随机选择一个与第一工作线程不同的第二工作线程,并通过第二检测模块40检测第二工作线程的当前负载是否小于第一工作线程的当前负载,并且判断第二工作线程的当前负载与第一工作线程的当前负载之间的差值是否大于预设阈值,此时调度装置的结构示意图如图3所示,在上述两个条件之中的任意一个条件未达成时,确定模块30依旧判定由第一工作线程继续处理第二请求,此时在系统缓存中存有第一工作线程在处理第一请求时的处理结果,基于系统缓存可以使第一工作线程在处理针对同一磁盘位置操作的第二请求时,直接获取第一请求的处理结果进行后续处理,可以提高系统的缓存利用率,增加第二请求的处理速度,降低长尾现象;在第二工作线程的当前负载小于第一工作线程的当前负载,且第二工作线程的当前负载与第一工作线程的当前负载之间的差值大于预设阈值的情况,即同时满足上述两个条件时,确定模块30确定将第二请求分配至第二工作线程进行处理,此时第二工作线程的负载在一定程度上小于第一工作线程,且二者负载之间的差值会在较大程度上影响第二请求的处理速度,即便第一工作线程在利用缓存的情况下处理第二请求,其处理效率也会低于直接使用负载小的第二工作线程,此时使用第二工作线程的处理效率更高。
本实施例通过在系统中设置大量的虚拟线程队列,减少在虚拟线程队列中请求排队的情况,避免请求之间冲突的情况发生,并且由于虚拟线程队列本身不占用系统的内存资源,可进一步降低对系统性能的影响。同时,虚拟线程队列为预先构造的虚拟队列,避免了动态修改映射的全局锁和资源竞争造成的性能退化。并且,在本实施例的调度方式同时考虑了工作线程的负载和系统缓存的利用率,明显降低了长尾现象,提升了系统性能。
本公开的第三实施例提供了一种存储介质,该存储介质为计算机可读介质,存储有计算机程序,该计算机程序被处理器执行时实现本公开任意实施例提供的方法,包括如下步骤S11至S13:
S11,将第一请求散列至第一虚拟线程队列;
S12,检测第一虚拟线程队列中是否存在正在处理的请求;
S13,在第一虚拟线程队列中未存在正在处理的请求的情况下,确定第一工作线程处理第一请求。
计算机程序被处理器执行将第一请求散列至第一虚拟线程队列时,具体被处理器执行如下步骤:根据第一请求操作的磁盘位置的ID确定第一请求的哈希值;根据哈希值确定第一虚拟线程队列,并将第一请求散列至第一虚拟线程队列。
计算机程序被处理器执行检测第一虚拟线程队列中是否存在正在处理的请求时,具体被处理器执行如下步骤:检测第一虚拟线程队列是否存在处理标记;在第一虚拟线程队列存在处理标记的情况下,确定第一虚拟线程队列中存在正在处理的请求;在第一虚拟线程队列不存在处理标记的情况下,确定第一虚拟线程队列中未存在正在处理的请求。
计算机程序被处理器执行确定第一工作线程处理第一请求时,具体被处理器执行如下步骤:在所有工作线程中随机选择至少两个工作线程;在随机选择的至少两个工作线程中,确定当前负载较小的工作线程为第一工作线程。
计算机程序被处理器执行确定第一工作线程处理第一请求之后,还被处理器执行如下步骤:在第一请求处理完毕之后,检测第一虚拟线程队列中是否存在等待处理的第二请求;在第一虚拟线程队列中存在第二请求时,在所有工作线程中随机选取第二工作线程;检测第二工作线程的当前负载是否小于第一工作线程的当前负载,且第二工作线程的当前负载与第一工作线程的当前负载之间的差值是否大于预设阈值;在第二工作线程的当前负载小于第一工作线程的当前负载,且第二工作线程的当前负载与第一工作线程的当前负载之间的差值大于预设阈值的情况下,将第二请求分配至第二工作线程进行处理;否则,将第二请求分配至第一工作线程进行处理。
本实施例通过在系统中设置大量的虚拟线程队列,减少在虚拟线程队列中请求排队的情况,避免请求之间冲突的情况发生,并且由于虚拟线程队列本身不占用系统的内存资源,可进一步降低对系统性能的影响。同时,虚拟线程队列为预先构造的虚拟队列,避免了动态修改映射的全局锁和资源竞争造成的性能退化。
本公开的第四实施例提供了一种电子设备,该电子设备的结构示意图可以如图4所示,至少包括存储器100和处理器200,存储器100上存储有计算机程序,处理器200在执行存储器100上的计算机程序时实现本公开任意实施例提供的方法。示例性的,电子设备计算机程序步骤如下S21至S23:
S21,将第一请求散列至第一虚拟线程队列;
S22,检测第一虚拟线程队列中是否存在正在处理的请求;
S23,在第一虚拟线程队列中未存在正在处理的请求的情况下,确定第一工作线程处理第一请求。
处理器在执行存储器上存储的将第一请求散列至第一虚拟线程队列的步骤时,具体执行如下计算机程序:根据第一请求操作的磁盘位置的ID确定第一请求的哈希值;根据哈希值确定第一虚拟线程队列,并将第一请求散列至第一虚拟线程队列。
处理器在执行存储器上存储的检测第一虚拟线程队列中是否存在正在处理的请求的步骤时,具体执行如下计算机程序:检测第一虚拟线程队列是否存在处理标记;在第一虚拟线程队列存在处理标记的情况下,确定第一虚拟线程队列中存在正在处理的请求;在第一虚拟线程队列不存在处理标记的情况下,确定第一虚拟线程队列中未存在正在处理的请求。
处理器在执行存储器上存储的确定第一工作线程处理第一请求的步骤时,具体执行如下计算机程序:在所有工作线程中随机选择至少两个工作线程;在随机选择的至少两个工作线程中,确定当前负载较小的工作线程为第一工作线程。
处理器在执行存储器上存储的确定第一工作线程处理第一请求之后,还执行如下计算机程序:在第一请求处理完毕之后,检测第一虚拟线程队列中是否存在等待处理的第二请求;在第一虚拟线程队列中存在第二请求时,在所有工作线程中随机选取第二工作线程;检测第二工作线程的当前负载是否小于第一工作线程的当前负载,且第二工作线程的当前负载与第一工作线程的当前负载之间的差值是否大于预设阈值;在第二工作线程的当前负载小于第一工作线程的当前负载,且第二工作线程的当前负载与第一工作线程的当前负载之间的差值大于预设阈值的情况下,将第二请求分配至第二工作线程进行处理;否则,将第二请求分配至第一工作线程进行处理。
本实施例通过在系统中设置大量的虚拟线程队列,减少在虚拟线程队列中请求排队的情况,避免请求之间冲突的情况发生,并且由于虚拟线程队列本身不占用系统的内存资源,可进一步降低对系统性能的影响。同时,虚拟线程队列为预先构造的虚拟队列,避免了动态修改映射的全局锁和资源竞争造成的性能退化。
在一些实施方式中,客户端、服务器可以利用诸如HTTP(HyperText TransferProtocol,超文本传输协议)之类的任何当前已知或未来研发的网络协议进行通信,并且可以与任意形式或介质的数字数据通信(例如,通信网络)互连。通信网络的示例包括局域网(LAN)、广域网(WAN)、网际网(例如,互联网)以及端对端网络(例如,ad hoc端对端网络),以及任何当前已知或未来研发的网络。
上述存储介质可以是上述电子设备中所包含的;也可以是单独存在,而未装配入该电子设备中。
上述存储介质承载有一个或者多个程序,当上述一个或者多个程序被该电子设备执行时,使得该电子设备:获取至少两个网际协议地址;向节点评价设备发送包括至少两个网际协议地址的节点评价请求,其中,节点评价设备从至少两个网际协议地址中,选取网际协议地址并返回;接收节点评价设备返回的网际协议地址;其中,所获取的网际协议地址指示内容分发网络中的边缘节点。
或者,上述存储介质承载有一个或者多个程序,当上述一个或者多个程序被该电子设备执行时,使得该电子设备:接收包括至少两个网际协议地址的节点评价请求;从至少两个网际协议地址中,选取网际协议地址;返回选取出的网际协议地址;其中,接收到的网际协议地址指示内容分发网络中的边缘节点。
可以以一种或多种程序设计语言或其组合来编写用于执行本公开的操作的计算机程序代码,上述程序设计语言包括但不限于面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
需要说明的是,本公开上述的存储介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本公开中,计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读信号介质还可以是计算机可读存储介质以外的任何存储介质,该计算机可读信号介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。存储介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:电线、光缆、RF(射频)等等,或者上述的任意合适的组合。
附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本公开实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现。其中,单元的名称在某种情况下并不构成对该单元本身的限定。
本文中以上描述的功能可以至少部分地由一个或多个硬件逻辑部件来执行。例如,非限制性地,可以使用的示范类型的硬件逻辑部件包括:现场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、片上系统(SOC)、复杂可编程逻辑设备(CPLD)等等。
在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD-ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
以上描述仅为本公开的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本公开中所涉及的公开范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离上述公开构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本公开中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。
此外,虽然采用特定次序描绘了各操作,但是这不应当理解为要求这些操作以所示出的特定次序或以顺序次序执行来执行。在一定环境下,多任务和并行处理可能是有利的。同样地,虽然在上面论述中包含了若干具体实现细节,但是这些不应当被解释为对本公开的范围的限制。在单独的实施例的上下文中描述的某些特征还可以组合地实现在单个实施例中。相反地,在单个实施例的上下文中描述的各种特征也可以单独地或以任何合适的子组合的方式实现在多个实施例中。
尽管已经采用特定于结构特征和/或方法逻辑动作的语言描述了本主题,但是应当理解所附权利要求书中所限定的主题未必局限于上面描述的特定特征或动作。相反,上面所描述的特定特征和动作仅仅是实现权利要求书的示例形式。
以上对本公开多个实施例进行了详细说明,但本公开不限于这些具体的实施例,本领域技术人员在本公开构思的基础上,能够做出多种变型和修改实施例,这些变型和修改都应落入本公开所要求保护的范围之内。
Claims (12)
1.一种请求的调度方法,其特征在于,包括:
将第一请求散列至第一虚拟线程队列;
检测所述第一虚拟线程队列中是否存在正在处理的请求;
在所述第一虚拟线程队列中未存在正在处理的请求的情况下,确定第一工作线程处理所述第一请求,并在处理所述第一请求时,将所述第一请求所归属的第一虚拟线程队列进行标记;
在所述第一请求处理完毕之后,检测所述第一虚拟线程队列中是否存在等待处理的第二请求;
在所述第一虚拟线程队列中存在所述第二请求时,在所有所述工作线程中随机选取第二工作线程,其中,所述第二工作线程与所述第一工作线程不同;
在所述第二工作线程的当前负载小于所述第一工作线程的当前负载,且所述第二工作线程的当前负载与所述第一工作线程的当前负载之间的差值大于预设阈值的情况下,将所述第二请求分配至所述第二工作线程进行处理;否则,将所述第二请求分配至所述第一工作线程进行处理。
2.根据权利要求1所述的调度方法,其特征在于,所述将第一请求散列至第一虚拟线程队列,包括:
根据所述第一请求操作的磁盘位置的ID确定所述第一请求的哈希值;
根据所述哈希值确定所述第一虚拟线程队列,并将所述第一请求散列至所述第一虚拟线程队列。
3.根据权利要求1所述的调度方法,其特征在于,所述检测所述第一虚拟线程队列中是否存在正在处理的请求,包括:
检测所述第一虚拟线程队列是否存在处理标记;
在所述第一虚拟线程队列存在所述处理标记的情况下,确定所述第一虚拟线程队列中存在正在处理的请求;
在所述第一虚拟线程队列不存在所述处理标记的情况下,确定所述第一虚拟线程队列中未存在正在处理的请求。
4.根据权利要求1所述的调度方法,其特征在于,所述确定第一工作线程处理所述第一请求,包括:
在所有工作线程中随机选择至少两个工作线程;
在所述随机选择的至少两个工作线程中,确定当前负载较小的工作线程为第一工作线程。
5.根据权利要求1至4中任一项所述的调度方法,其特征在于,在所述确定第一工作线程处理所述第一请求之后,还包括:
检测所述第二工作线程的当前负载是否小于所述第一工作线程的当前负载,且所述第二工作线程的当前负载与所述第一工作线程的当前负载之间的差值是否大于预设阈值。
6.一种请求的调度装置,其特征在于,包括:
散列模块,用于将第一请求散列至第一虚拟线程队列;
第一检测模块,用于检测所述第一虚拟线程队列中是否存在正在处理的请求;
确定模块,用于在所述第一虚拟线程队列中未存在正在处理的请求的情况下,确定第一工作线程处理所述第一请求,并在处理所述第一请求时,将所述第一请求所归属的第一虚拟线程队列进行标记;
所述第一检测模块,还用于在所述第一请求处理完毕之后,检测所述第一虚拟线程队列中是否存在等待处理的第二请求;
所述确定模块,还用于在所述第一虚拟线程队列中存在所述第二请求时,在所有所述工作线程中随机选取第二工作线程,其中,所述第二工作线程与所述第一工作线程不同;
所述确定模块,还用于在所述第二工作线程的当前负载小于所述第一工作线程的当前负载,且所述第二工作线程的当前负载与所述第一工作线程的当前负载之间的差值大于预设阈值的情况下,将所述第二请求分配至所述第二工作线程进行处理;否则,将所述第二请求分配至所述第一工作线程进行处理。
7.根据权利要求6所述的调度装置,其特征在于,所述散列模块,具体用于:
根据所述第一请求操作的磁盘位置的ID确定所述第一请求的哈希值;
根据所述哈希值确定所述第一虚拟线程队列,并将所述第一请求散列至所述第一虚拟线程队列。
8.根据权利要求6所述的调度装置,其特征在于,所述第一检测模块,具体用于:
检测所述第一虚拟线程队列是否存在处理标记;
在所述第一虚拟线程队列存在所述处理标记的情况下,确定所述第一虚拟线程队列中存在正在处理的请求;
在所述第一虚拟线程队列不存在所述处理标记的情况下,确定所述第一虚拟线程队列中未存在正在处理的请求。
9.根据权利要求6所述的调度装置,其特征在于,所述确定模块,具体用于:
在所有工作线程中随机选择至少两个工作线程;
在所述随机选择的至少两个工作线程中,确定当前负载较小的工作线程为第一工作线程。
10.根据权利要求6至9中任一项所述的调度装置,其特征在于,还包括:
第二检测模块,用于检测所述第二工作线程的当前负载是否小于所述第一工作线程的当前负载,且所述第二工作线程的当前负载与所述第一工作线程的当前负载之间的差值是否大于预设阈值。
11.一种存储介质,存储有计算机程序,其特征在于,所述计算机程序被处理器处理时实现权利要求1至5中任一项所述方法的步骤。
12.一种电子设备,至少包括存储器、处理器,所述存储器上存储有计算机程序,其特征在于,所述处理器在处理所述存储器上的计算机程序时实现权利要求1至5中任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010099172.4A CN111324438B (zh) | 2020-02-18 | 2020-02-18 | 请求的调度方法、装置、存储介质及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010099172.4A CN111324438B (zh) | 2020-02-18 | 2020-02-18 | 请求的调度方法、装置、存储介质及电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111324438A CN111324438A (zh) | 2020-06-23 |
CN111324438B true CN111324438B (zh) | 2023-09-19 |
Family
ID=71172810
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010099172.4A Active CN111324438B (zh) | 2020-02-18 | 2020-02-18 | 请求的调度方法、装置、存储介质及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111324438B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111724262B (zh) * | 2020-06-24 | 2024-03-22 | 上海金仕达软件科技股份有限公司 | 一种应用服务器后续包查询系统及其工作方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1592886A (zh) * | 2000-11-24 | 2005-03-09 | 凯萨罗恩产品公司 | 通过虚拟线程执行计算机多任务的方法及装置 |
WO2016017161A1 (ja) * | 2014-07-31 | 2016-02-04 | 日本電気株式会社 | 仮想計算機システム、スケジューリング方法、および、プログラム記憶媒体 |
CN108052392A (zh) * | 2017-12-26 | 2018-05-18 | 质数链网科技成都有限公司 | 一种基于区块链的业务处理方法及装置 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060130062A1 (en) * | 2004-12-14 | 2006-06-15 | International Business Machines Corporation | Scheduling threads in a multi-threaded computer |
US8677356B2 (en) * | 2011-01-11 | 2014-03-18 | International Business Machines Corporation | Adjunct partition work scheduling with quality of service attributes |
-
2020
- 2020-02-18 CN CN202010099172.4A patent/CN111324438B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1592886A (zh) * | 2000-11-24 | 2005-03-09 | 凯萨罗恩产品公司 | 通过虚拟线程执行计算机多任务的方法及装置 |
WO2016017161A1 (ja) * | 2014-07-31 | 2016-02-04 | 日本電気株式会社 | 仮想計算機システム、スケジューリング方法、および、プログラム記憶媒体 |
CN108052392A (zh) * | 2017-12-26 | 2018-05-18 | 质数链网科技成都有限公司 | 一种基于区块链的业务处理方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN111324438A (zh) | 2020-06-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US12107769B2 (en) | Throttling queue for a request scheduling and processing system | |
US7219121B2 (en) | Symmetrical multiprocessing in multiprocessor systems | |
US7765405B2 (en) | Receive side scaling with cryptographically secure hashing | |
US9866479B2 (en) | Technologies for concurrency of cuckoo hashing flow lookup | |
US8626955B2 (en) | Directing packets to a processor unit | |
US7836195B2 (en) | Preserving packet order when migrating network flows between cores | |
CN109255057B (zh) | 区块生成方法、装置、设备及存储介质 | |
US8239873B2 (en) | Speedy event processing | |
US11777873B1 (en) | Method and apparatus for managing buffering of data packet of network card, terminal and storage medium | |
US20190286582A1 (en) | Method for processing client requests in a cluster system, a method and an apparatus for processing i/o according to the client requests | |
CN111324438B (zh) | 请求的调度方法、装置、存储介质及电子设备 | |
US10379900B2 (en) | Dispatching jobs for execution in parallel by multiple processors | |
US10826819B2 (en) | System and method for data transmission in distributed computing environments | |
US9894012B2 (en) | Method and system to improve network connection locality on multicore systems | |
US10284501B2 (en) | Technologies for multi-core wireless network data transmission | |
WO2021073473A1 (zh) | 数据包处理方法、装置、通信设备及存储介质 | |
US10884950B2 (en) | Importance based page replacement | |
US20170063976A1 (en) | Dynamic record-level sharing (rls) provisioning inside a data-sharing subsystem | |
CN113886082A (zh) | 请求处理方法、装置、计算设备及介质 | |
CN114584623B (zh) | 流量请求清理方法、装置、存储介质以及计算机设备 | |
US8526326B1 (en) | Lock-less access of pre-allocated memory buffers used by a network device | |
CN117806791A (zh) | 基于硬件的资源调度设备、方法、电子设备及存储介质 | |
CN114466079A (zh) | 请求处理方法、装置、代理服务器及存储介质 | |
JP6412888B2 (ja) | ミドルウェアマシン環境において協働的同時並行性をサポートするためのシステムおよび方法 | |
CN114140114A (zh) | X个标准交易池的调用方法、系统、介质和计算机系统 |
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 |