一种分布式文件系统的线程分配方法及系统技术领域
本发明涉及线程分配技术领域,特别是涉及一种分布式文件系统
的线程分配方法及系统。
背景技术
目前,在分布式文件系统中的多线程消息通常是使用基于文件描
述符的hash算法进行分发的,这种算法存在一个缺陷,就是容易出现
所有读写请求任务都往某个或某几个线程转发,特别是当文件描述符
不是连续的时候,极端情况下会导致所有文件都分配到一个线程中,
而其他线程一直处于空闲,使得所有读写请求任务都积压到一个线程
队中,导致很多请求长时间不能得到处理,导致系统处理效率低;同
时,所有读写请求任务都积压到一个线程队中,使得系统的资源得不
到充分利用,易导致整个系统的性能急剧下降。
因此,亟需一种能够均衡多线程池中各个线程处理的请求数量,
进而保证系统的处理高效性和性能稳定性。
发明内容
有鉴于此,本发明提供了一种分布式文件系统的线程分配方法及
系统,以实现均衡多线程池中各个线程处理的请求数量,进而保证系
统的处理高效性和性能稳定性的目的。
为解决上述技术问题,本发明提供一种分布式文件系统的线程分
配方法,该方法包括:
获取携带文件描述符的读写请求;
判断是否存在与所述文件描述符相对应的线程;
如果存在,则将所述读写请求分配至所述相对应的线程;
如果不存在,则将所述读写请求分配至平衡链表中管理文件数量
最少的线程;
其中,所述平衡链表包括多个节点,各所述节点包括线程及其相
应的管理文件数量。
上述方法中,优选地,所述判断是否存在与所述文件描述符相对
应的线程,包括:
在map的所有键值对中,判断是否存在主键为所述文件描述符的
键值对;
如果存在,则认为存在与所述文件描述符相对应的线程;
如果不存在,则认为不存在与所述文件描述符相对应的线程;
其中,与所述主键相对应的主键值为与所述文件描述符相对应的
线程ID。
上述方法中,优选地,在所述将所述读写请求分配至平衡链表中
管理文件数量最少的线程之后,还包括:
新建一键值对,并将所述文件描述符和所述管理文件数量最少的
线程记录至新建的键值对中;
将所述管理文件数量最少的线程所对应的管理文件数量加1。
上述方法中,优选地,当检测到携带所述文件描述符的文件关闭
指令时,还包括:
在所述map中,将所述主键为所述文件描述符的键值对删除;
在所述平衡链表中,将被分配所述读写请求的线程所对应的管理
文件数量减1。
上述方法中,优选地,所述将所述读写请求分配至平衡链表中管
理文件数量最少的线程,包括:
将所述读写请求分配至所述平衡链表中第一个节点所对应的线
程;
其中,所述平衡链表中所有节点按所述管理文件数据量由小到大
排列。
本发明还提供了一种分布式文件系统的线程分配系统,该系统包
括:
获取单元,用于获取携带文件描述符的读写请求;
判断单元,用于判断是否存在与所述文件描述符相对应的线程;
线程分配单元,用于如果存在,则将所述读写请求分配至所述相
对应的线程;如果不存在,则将所述读写请求分配至平衡链表中管理
文件数量最少的线程;
其中,所述平衡链表包括多个节点,各所述节点包括线程及其相
应的管理文件数量。
上述系统中,优选地,所述判断单元具体用于:
在map的所有键值对中,判断是否存在主键为所述文件描述符的
键值对;如果存在,则认为存在与所述文件描述符相对应的线程;如
果不存在,则认为不存在与所述文件描述符相对应的线程;
其中,与所述主键相对应的主键值为与所述文件描述符相对应的
线程ID。
上述系统中,优选地,还包括:
键值对管理单元,用于在所述将所述读写请求分配至平衡链表中
管理文件数量最少的线程之后,新建一键值对,并将所述文件描述符
和所述管理文件数量最少的线程记录至新建的键值对中;
管理文件数量管理单元,用于将所述管理文件数量最少的线程所
对应的管理文件数量加1。
上述系统中,优选地,所述键值对管理单元还用于当检测到携带
所述文件描述符的文件关闭指令时,在所述map中,将所述主键为所
述文件描述符的键值对删除;
所述管理文件数量管理单元还用于当检测到携带所述文件描述
符的文件关闭指令时,在所述平衡链表中,将被分配所述读写请求的
线程所对应的管理文件数量减1。
上述系统中,优选地,线程分配单元用于将所述读写请求分配至
平衡链表中管理文件数量最少的线程,包括:
所述线程分配单元具体用于将所述读写请求分配至所述平衡链
表中第一个节点所对应的线程;
其中,所述平衡链表中所有节点按所述管理文件数据量由小到大
排列。
以上本发明提供的一种分布式文件系统的线程分配方法及系统
中,平衡链表包括多个节点,各节点包括线程及其相应的管理文件数
量,平衡链表中记录了多线程池中所有线程及其相应的管理文件数量,
基于此,先获取携带文件描述符的读写请求;然后判断是否存在与所
述文件描述符相对应的线程;如果存在,认为这不是该文件描述符对
应的第一次读写请求,先前已经为其分配过相应的线程,则将读写请
求分配至这个相对应的线程;如果不存在,认为这是该文件描述符对
应的第一次读写请求,需要从多线程池中为其分配一合适的线程,则
将所述读写请求分配至平衡链表中管理文件数量最少的线程。可见,
本发明实现了均衡多线程池中各个线程处理的请求数量,进而保证系
统的处理高效性和性能稳定性的目的。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面
将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而
易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通
技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附
图获得其他的附图。
图1为本发明实施例提供的一种分布式文件系统的线程分配方法
的流程图;
图2为本发明实施例提供的一种分布式文件系统的线程分配系统
的结构框图示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方
案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部
分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普
通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,
都属于本发明保护的范围。
本发明的核心是提供一种分布式文件系统的线程分配方法及系
统,以实现均衡多线程池中各个线程处理的请求数量,进而保证系统
的处理高效性和性能稳定性的目的。
为了使本技术领域的人员更好地理解本发明方案,下面结合附图
和具体实施方式对本发明作进一步的详细说明。
参考图1,图1示出了本发明实施例提供的一种分布式文件系统
的线程分配方法的流程图,该方法具体可以包括如下步骤:
步骤S100、获取携带文件描述符的读写请求。
本发明所提供的技术方案主要针对分布式文件系统NAS网关中
的负载均衡,让每个线程处理的请求数量趋于一致,从而达到负载均
衡的效果。
本发明中,不同文件对应不同的文件描述符,文件与文件描述符
一一对应。对某个文件发起读写操作时,生成携带该文件对应的文件
描述符的读写请求。本发明所涉及的读写请求泛指对文件的各种操作,
比如读操作、写操作等等。
步骤S101、判断是否存在与文件描述符相对应的线程;如果存在,
则进入步骤S102;如果不存在,则进入步骤S103。
本发明中,在获取读写请求之后判断是否存在与读写请求携带的
文件描述符对应的线程是为了判断本次读写请求是否是该文件的第一
次请求,如果是,则需要执行步骤S103从多线程池中为其分配一合
适的线程,然后将本次读写请求分配出去;如果不是,可以理解的是,
先前已经为该文件分配过合适的线程,此时,进入步骤S102将本次
读写请求分配给之前分配的线程即可。
进一步地,为了能够方便、快捷地判断是否存在与文件描述符相
对应的线程,可以创建一个map数据结构,对于map中每个键值对,
文件描述符为主键,线程ID为值,该线程ID所对应的线程为已分配
给主键中文件描述符对应的文件,简单来说,即文件描述符与线程ID
一一对应。可以理解的是,在实际应用中,只要为某个文件的读写请
求分配过线程,那么他们相对应的文件描述符和线程ID就会以键值
对的形式记录在map中。
基于此,要判断是否存在与文件描述符相对应的线程,即判断在
map的所有键值对中是否存在主键为文件描述符的键值对;如果存在,
则认为存在与文件描述符相对应的线程;如果不存在,则认为不存在
与文件描述符相对应的线程;其中,与主键相对应的主键值为与文件
描述符相对应的线程ID。
步骤S102、将读写请求分配至相对应的线程。
步骤S103、将读写请求分配至平衡链表中管理文件数量最少的线
程。
为了方便管理多线程池中每个线程所管理的文件数量,即每个线
程被分配给几个文件去处理这些文件的读写请求,本发明创建了一个
平衡链表数据结构,该平衡链表包括多个节点,各节点包括线程及其
相应的管理文件数量。平衡链表中记录了多线程池中所有线程及其相
应的管理文件数量,即平衡链表中节点的数量与多线程池中线程的数
据一致。
具体地,在平衡链表中,用线程ID唯一标识每个线程,也就是
说,通过一线程ID可以找到与其对应的线程,各节点具体包括线程
ID和该线程ID对应的线程所管理的文件数量。其中,线程ID对应的
管理文件数据的默认值为0。当某个线程被分配去处理某个文件的读
写请求时,该线程的线程ID对应的管理文件数量加1。
进一步地,为了能够快速从平衡链表中查找到管理文件数据最少
的线程,可以将平衡链表中所有节点按管理文件数据量由小到大排列,
可以理解的是,此时平衡链表中的第一节点为管理文件数量最少的节
点,基于此,当步骤S101中判定不存在与读写请求中文件描述符相
对应的线程时,直接将读写请求分配至平衡链表中第一个节点所对应
的线程即可。
根据上述提及的map和平衡链表的作用,可以理解的是,在步骤
S103中将读写请求分配至平衡链表中管理文件数量最少的线程之后,
还需要新建一键值对,并将文件描述符和管理文件数量最少的线程记
录至新建的键值对中;将管理文件数量最少的线程所对应的管理文件
数量加1。
相对应地,当检测到携带文件描述符的文件关闭指令时,在map
中,将主键为文件描述符的键值对删除;在平衡链表中,将被分配读
写请求的线程所对应的管理文件数量减1。这样可以释放map和平衡
链表中的空间,以便后续其它文件的读写请求使用。
可见,本发明实现了均衡多线程池中各个线程处理的请求数量,
进而保证系统的处理高效性和性能稳定性的目的。
基于上述本发明实施例提供的分布式文件系统的线程分配方法,
本发明实施例还提供了一种分布式文件系统的线程分配系统,参考图
2,该系统200可以包括如下内容:
获取单元201,用于获取携带文件描述符的读写请求;
判断单元202,用于判断是否存在与文件描述符相对应的线程;
线程分配单元203,用于如果存在,则将读写请求分配至相对应
的线程;如果不存在,则将读写请求分配至平衡链表中管理文件数量
最少的线程;
其中,平衡链表包括多个节点,各节点包括线程及其相应的管理
文件数量。
本发明中,判断单元202具体可以用于:在map的所有键值对中,
判断是否存在主键为文件描述符的键值对;如果存在,则认为存在与
文件描述符相对应的线程;如果不存在,则认为不存在与文件描述符
相对应的线程;
其中,与主键相对应的主键值为与文件描述符相对应的线程ID。
本发明中,上述系统200具体还可以包括如下内容:
键值对管理单元,用于在将读写请求分配至平衡链表中管理文件
数量最少的线程之后,新建一键值对,并将文件描述符和管理文件数
量最少的线程记录至新建的键值对中;
管理文件数量管理单元,用于将管理文件数量最少的线程所对应
的管理文件数量加1。
本发明中,键值对管理单元还用于当检测到携带文件描述符的文
件关闭指令时,在map中,将主键为文件描述符的键值对删除;
管理文件数量管理单元还用于当检测到携带文件描述符的文件
关闭指令时,在平衡链表中,将被分配读写请求的线程所对应的管理
文件数量减1。
本发明中,线程分配单元203用于将读写请求分配至平衡链表中
管理文件数量最少的线程,包括:线程分配单元203具体用于将读写
请求分配至平衡链表中第一个节点所对应的线程;
其中,平衡链表中所有节点按管理文件数据量由小到大排列。
需要说明的是,本说明书中的各个实施例均采用递进的方式描
述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施
例之间相同相似的部分互相参见即可。对于系统类实施例而言,由于
其与方法实施例基本相似,所以描述得比较简单,相关之处参见方法
实施例的部分说明即可。
以上对本发明所提供的一种分布式文件系统的线程分配方法及
系统进行了详细介绍。本文中应用了具体个例对本发明的原理及实施
方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法
及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在
不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,
这些改进和修饰也落入本发明权利要求的保护范围内。