线程分配方法、服务器及计算机可读存储介质与流程

文档序号:20945556发布日期:2020-06-02 19:51阅读:150来源:国知局
线程分配方法、服务器及计算机可读存储介质与流程

本发明涉及计算机领域,尤其涉及一种线程分配方法、服务器及计算机可读存储介质。



背景技术:

随着当前社会的发展,手机,平板,机顶盒,电视等等设备的普及,有大量的软件开发工作者投入到操作系统的开发中。一般来说,一台编译服务器会存在同时有多个用户进行编译的情况,而由于操作系统的源码和编译非常庞大,一次完整编译会占用大量的资源,使得在有用户进行完整编译时,其他用户需要等待完整编译完成之后才能正常进行编译工作,大大降低了开发效率,影响整体项目的开发进度和工程维护。



技术实现要素:

本发明的主要目的在于提出一种线程分配方法、服务器及计算机可读存储介质,旨在解决现有技术中在有用户进行完整编译时,导致开发效率低,影响整体项目的开发进度和工程维护的问题。

为实现上述目的,本发明提供一种线程分配方法,所述方法包括步骤:

获取服务器最大线程数,并检测当前正在执行编译操作的登录账户个数;

将所述登陆账户个数作为线程占用账户个数,并根据所述服务器最大线程数及线程占用账户个数设置每个登陆账户当前所能使用的个人最大线程数。

可选地,所述根据所述服务器最大线程数及所述线程占用账户个数设置每个登陆账户当前所能使用的个人最大线程数的步骤包括:

将所述服务器最大线程数与所述线程占用账户个数相除的结果作为每个登录账户当前所能使用的个人最大线程数。

可选地,所述检测当前正在执行编译操作的登录账户个数的步骤之后,还包括:

判断线程占用账户是否存在历史个人最大线程数;

当不存在历史个人最大线程数时,执行步骤:将所述登陆账户个数作为线程占用账户个数;

当存在历史个人最大线程数时,判断检测得到的登录账户个数是否与线程占用账户个数一致;

若不一致时,则根据检测得到的登录账户个数更新线程占用账户个数,并执行步骤:根据所述服务器最大线程数及线程占用账户个数设置每个登陆账户当前所能使用的个人最大线程数。

可选地,所述获取服务器最大线程数的步骤包括:

获取服务器最大线程数中,所述服务器的最大写线程数;

所述将所述登陆账户个数作为线程占用账户个数,并根据所述服务器最大线程数及线程占用账户个数设置每个登陆账户当前所能使用的个人最大线程数的步骤包括:

获取所述登陆账户中需要执行写命令的写入账户个数,并将所述写入账户个数作为写线程占用账户个数;

将所述最大写线程数与所述写线程占用账户个数相除的结果作为每个写入账户当前所能使用的个人最大写线程数。

可选地,所述获取所述登陆账户中需要执行写命令的写入账户个数的步骤之后包括:

判断写入账户是否存在历史个人最大写线程数;

当不存在历史个人最大写线程数时,执行步骤:将所述写入账户个数作为写线程占用账户个数;

当存在历史个人最大写线程数时,判断获取的写入账户个数是否与写线程占用账户个数一致;

若不一致时,则根据所述获取的写入账户个数更新写线程占用账户个数,并执行步骤:将所述最大写线程数与所述写线程占用账户个数相除的结果作为每个写入账户当前所能使用的个人最大写线程数。

可选地,所述方法还包括:

检测单线程中等待执行的命令对应的单线程账户个数;

获取所述单线程单次最大执行命令数,并将所述单次最大执行命令数与所述单线程账户个数相除,得到每个单线程账户的平均执行命令数;

将所述平均执行命令数作为每个单线程账户的个人单次最大执行命令数。

可选地,所述获取所述单线程单次最大执行命令数的步骤之后包括:

判断检测得到的单线程账户个数是否与所述单线程中正在执行命令的单线程账户个数一致;

当检测得到的单线程账户个数与正在执行命令的单线程账户个数一致时,保持正在执行命令的单线程账户个数对应的个人单次最大执行命令数设置;

当检测得到的单线程账户个数与正在执行命令的单线程账户个数不一致时,在确定所述单线程中所有正在执行的命令执行完毕后,执行步骤:将所述单次最大执行命令数与所述单线程账户个数相除,得到每个单线程账户的平均执行命令数。

可选地,所述方法还包括:

当检测得到的单线程账户个数小于正在执行命令的单线程账户个数时,释放减少的单线程账户对应的缓存。

为实现上述目的,本发明还提供一种服务器,所述服务器包括存储器、处理器和存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如上所述的线程分配方法的步骤。

为实现上述目的,本发明还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上所述的线程分配方法的步骤。

本发明提出的一种线程分配方法、服务器及计算机可读存储介质,获取服务器最大线程数,并检测当前正在执行编译操作的登录账户个数;将所述登陆账户个数作为线程占用账户个数,并根据所述服务器最大线程数及线程占用账户个数设置每个登陆账户当前所能使用的个人最大线程数。其中根据当前正在进行编译工作的账户数以及服务器最大线程数来对线程进行分配,避免出现单用户占用大量线程的情况,使得每个用户的编译效率得到保证,提升了开发效率,也减少了对于整体项目的开发进度和工程维护的影响。

附图说明

图1为本发明线程分配方法第一实施例的流程示意图;

图2为本发明线程分配方法第三实施例的流程示意图;

图3为本发明服务器的模块结构示意图。

具体实施方式

应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。

本发明提供一种线程分配方法,参照图1,图1为本发明线程分配方法第一实施例的流程示意图,所述方法包括步骤:

步骤s10,获取服务器最大线程数,并检测当前正在执行编译操作的登录账户个数;

所述服务器最大线程数取决于服务器的硬件结构,一般而言是固定不变的。所述当前正在执行编译操作的登录账户个数是指在所有的登录账户中存在进行编译任务的登陆账户的个数。

步骤s20,将所述登陆账户个数作为线程占用账户个数,并根据所述服务器最大线程数及线程占用账户个数设置每个登陆账户当前所能使用的个人最大线程数。

为了能够明确当前需要分配线程进行编译的账户数,将所述登陆账户个数作为线程占用账户个数,根据所述服务器最大线程数及线程占用账户个数设置每个登陆账户当前所能使用的个人最大线程数,确保每个用户都能够得到资源。这样能够保证在多个用户同时使用编译服务器的时候,局部编译的工程师也能够得到资源,保证调试效率。从而最大化合理利用了编译服务器的资源和性能。可以理解的是,所述个人最大线程数是指所述线程占用账户所能使用的最大线程数,线程占用账户同样可以根据实际编译需求以小于所述最大线程数的线程进行编译工作。

本实施例通过获取服务器最大线程数,并检测当前正在执行编译操作的登录账户个数;将所述登陆账户个数作为线程占用账户个数,并根据所述服务器最大线程数及线程占用账户个数设置每个登陆账户当前所能使用的个人最大线程数。其中根据当前正在进行编译工作的账户数以及服务器最大线程数来对线程进行分配,避免出现单用户占用大量线程的情况,使得每个用户的编译效率得到保证,提升了开发效率,也减少了对于整体项目的开发进度和工程维护的影响。进一步地,在基于本发明的第一实施例所提出的本发明线程分配方法第二实施例中,所述步骤s20包括步骤:

步骤s21,将所述服务器最大线程数与所述线程占用账户个数相除的结果作为每个登录账户当前所能使用的个人最大线程数。

一般地,服务器在分配线程时会优先需求较大的编译任务,如一次完整编译需要占用大量的线程资源,同时编译的时间较长,导致后来的编译任务即便是局部编译小范围代码,而由于线程资源已被占用,导致编译速度很慢。因此,本实施例将服务器最大线程数对当前线程占用账户进行平均分配,不再对编译任务量大的账户进行资源倾斜,保证每个登陆账户均能有足够的线程进行编译。进一步地,当服务器最大线程数与所述线程占用账户个数相除存在余数时,将能够整除的部分对应的线程平均分配至线程占用账户,剩余的线程可以根据线程占用账户中的编译任务量进行分配。

本实施例通过将所述服务器最大线程数与所述线程占用账户个数相除的结果作为每个线程占用账户当前所能使用的个人最大线程数,最大化合理利用了编译服务器的资源和性能,提供了编译效率,解决了多个工程师使用同一台编译服务器,存在编译长久等待获取不到资源,编译效率低下的问题。

进一步地,参照图2,在基于本发明的第一实施例所提出的本发明线程分配方法第三实施例中,在所述步骤s10之后包括步骤:

步骤s30,判断线程占用账户是否存在历史个人最大线程数;其中,当不存在历史个人最大线程数时,执行步骤s20;

步骤s32,当存在历史个人最大线程数时,判断检测得到的登录账户个数是否与线程占用账户个数一致;

步骤s321,若不一致时,则根据检测得到的登录账户个数更新线程占用账户个数,并执行步骤:根据所述服务器最大线程数及线程占用账户个数设置每个登陆账户当前所能使用的个人最大线程数。

所述历史个人最大线程数是指线程占用账户当前被服务器根据线程占用账户个数分配的个人最大线程数。当不存在历史个人最大线程数时,说明此时服务器并没有进行编译工作,此时也并无线程占用账户,因此,可以直接将所述登陆账户个数作为线程占用账户个数。当存在历史个人最大线程数时,说明此时服务器正在进行编译工作,而由于本实施例是将服务器最大线程数对当前线程占用账户进行平均分配,因此,在总的线程占用账户个数不变的情况下,无需对每个登陆账户当前所能使用的个人最大线程数进行更改,因此需要在变更每个登陆账户当前所能使用的个人最大线程数之前确认线程占用账户个数是发生了改变的,当检测得到的登录账户个数是否与线程占用账户个数一致时,则保持每个登陆账户当前所能使用的个人最大线程数不变;当检测得到的登录账户个数是否与线程占用账户个数不一致时,将线程占用账户个数更新为最新检测得到的登陆账户个数。

当当前线程占用账户个数发生变化时,将服务器最大线程数平均分配给最新的每个线程占用账户。例如,当前服务器的最大线程数为48线程,而原本只有一个线程占用账户,该线程占用账户的个人最大线程数为48线程,达到最高的编译效率;若此时检测到登录账户个数变为两个,即将线程占用账户也设为2个,服务器重新将线程进行分配,因此,当前的两个线程占用账户的个人最大线程数分别为24线程。

当每个登陆账户个数进行改变时,将每个登陆账户当前所能使用的个人最大线程数也随之改变,使得服务器线程分配随着登陆账户个数的变化而调整,实施保障用户的编译效率。

进一步地,在基于本发明的第一实施例所提出的本发明线程分配方法第四实施例中,所述步骤s10包括步骤:

获取服务器最大线程数中,所述服务器的最大写线程数;

本实施例所强调的最大线程数是广义的,不仅可以包括服务器最大可接受线程数,还可以包括各种类型线程操作对应的最大线程数,其中线程操作可以包括写操作,只读操作等等。

所述步骤s20包括步骤:

获取所述登陆账户中需要执行写命令的写入账户个数,并将所述写入账户个数作为写线程占用账户个数;

将所述最大写线程数与所述写线程占用账户个数相除的结果作为每个写入账户当前所能使用的个人最大写线程数。

其中,所述获取所述登陆账户中需要执行写命令的写入账户个数的步骤之后还可以包括步骤:判断写入账户是否存在历史个人最大写线程数;当不存在历史个人最大写线程数时,执行步骤:将所述写入账户个数作为写线程占用账户个数;当存在历史个人最大写线程数时,判断获取的写入账户个数是否与写线程占用账户个数一致;若不一致时,则根据所述获取的写入账户个数更新写线程占用账户个数,并执行步骤:将所述最大写线程数与所述写线程占用账户个数相除的结果作为每个写入账户当前所能使用的个人最大写线程数。

所述写命令是指用户写文件到硬盘或者flash上面的命令,由于写操作是硬件上面的实际操作,写的时间和时序接口是硬盘或者存储设备有所限制的,因此写命令需要编译的时间更长。本实施例单独将写线程平均分配给当前需要执行写命令的写入账户。例如,当前服务器的最大线程数为48线程,其中最大写线程数占24线程,此时线程占用账户为6个,其中,写线程占用账户占4个;则当前每个线程占用账户所能分配到的个人最大线程数为8线程,线程占用账户中的写线程占用账户所能分配到的个人最大写线程数为6个,因此4个写线程占用账户所能分配到的线程为6个写线程及2个非写线程,线程占用账户中除写线程占用账户外的2个线程占用账户所能分配到的线程为8个非写线程。进一步地,当最大写线程数与所述写线程占用账户个数相除存在余数时,将能够整除的部分对应的写线程平均分配至写线程占用账户,剩余的写线程可以根据各写线程占用账户中的写命令数量进行分配。

当写入账户个数变化时,重新对最大写线程数进行分配的方案与前述登录账户变化时,重新对服务器最大线程数进行分配的方案类似,不再赘述。需要说明的是,写入账户减少时的情况可以为之前执行写命令的登陆账户退出编译,或是已编译完成,还可以为登陆账户的编译任务中的写命令已完成,不过还有其它的命令正在进行编译。

本实施例单独将写线程平均分配给当前需要执行写命令的写入账户,以避免出现将服务器最大线程数平均分配给登陆账户时写线程分配不均、或是分配给不需要执行写命令的登陆账户的问题。

进一步地,在基于本发明的第一实施例所提出的本发明线程分配方法第五实施例中,所述方法还包括步骤:

检测单线程中等待执行的命令对应的单线程账户个数;

获取所述单线程单次最大执行命令数,并将所述单次最大执行命令数与所述单线程账户个数相除,得到每个单线程账户的平均执行命令数;

将所述平均执行命令数作为每个单线程账户的个人单次最大执行命令数。

其中,所述获取所述单线程单次最大执行命令数的步骤之后包括:

判断检测得到的单线程账户个数是否与所述单线程中正在执行命令的单线程账户个数一致;

当检测得到的单线程账户个数与正在执行命令的单线程账户个数一致时,保持正在执行命令的单线程账户个数对应的个人单次最大执行命令数设置;

当检测得到的单线程账户个数与正在执行命令的单线程账户个数不一致时,在确定所述单线程中所有正在执行的命令执行完毕后,执行步骤:将所述单次最大执行命令数与所述单线程账户个数相除,得到每个单线程账户的平均执行命令数。

有些服务器的线程支持单次多命令注入,因此,为了均衡各登陆账户的编译效率,对单次最大命令数进行平均分配,例如:在一个线程中,该线程的单次最大执行命令数为16个,此时一共有4个单线程账户同时有命令输入,则每个单线程账户单次可以执行的命令为4个;当该线程有新的单线程账户加入的时候,每个单线程账户执行命令的个数需要进一步拆分,以保障每个用户均能得到资源,如此时单线程账户从4个增加为5个,则每个单线程账户单次可以执行的命令为3个。进一步地,当线程的单次最大执行命令数与所述单线程账户个数相除存在余数时,将能够整除的部分对应的单次执行命令平均分配至单线程账户,剩余的命令可以根据各单线程账户中的命令数量进行分配。

通过将单线程中的单次最大执行命令数平均分配给该线程中的单线程账户,使得每个用户均能够有效的获取编译资源,提高每个用户的编译效率。

进一步地,所述方法还包括:当检测得到的单线程账户个数小于正在执行命令的单线程账户个数时,释放减少的单线程账户对应的缓存。

本方案是在当前检测到的单线程账户个数与正在执行命令的单线程账户个数不一致的基础上,确定的检测得到的单线程账户个数小于正在执行命令的单线程账户个数,此时不仅要从重新调整单线程账户的平均执行命令数,还可以释放内存。即在单线程账户执行完该线程上需要执行的命令之后,即便当前线程上已没有该单线程账户所要执行的命令,该单线程账户仍然会占用该线程,因此,需要将该单线程账户对应的缓存释放,以更新单线程账户个数。

释放减少的单线程账户对应的缓存,使得服务器能实时检测到单线程上实际进行编译工作的单线程账户个数,避免线程被空占,浪费线程资源。

参照图3,在硬件结构上所述服务器可以包括通信模块10、存储器20以及处理器30等部件。在所述服务器中,所述处理器30分别与所述存储器20以及所述通信模块10连接,所述存储器20上存储有计算机程序,所述计算机程序同时被处理器30执行,所述计算机程序执行时实现上述方法实施例的步骤。

通信模块10,可通过网络与外部通讯设备连接。通信模块10可以接收外部通讯设备发出的请求,还可以发送请求、指令及信息至所述外部通讯设备,所述外部通讯设备可以是其它服务器、服务器或者物联网设备,例如电视等等。

存储器20,可用于存储软件程序以及各种数据。存储器20可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如判断线程占用账户是否存在历史个人最大线程数)等;存储数据区可包括数据库,存储数据区可存储根据系统的使用所创建的数据或信息等。此外,存储器20可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。

处理器30,是服务器的控制中心,利用各种接口和线路连接整个服务器的各个部分,通过运行或执行存储在存储器20内的软件程序和/或模块,以及调用存储在存储器20内的数据,执行服务器的各种功能和处理数据,从而对服务器进行整体监控。处理器30可包括一个或多个处理单元;可选地,处理器30可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器30中。

尽管图3未示出,但上述服务器还可以包括电路控制模块,所述电路控制模块用于与电源连接,保证其他部件的正常工作。本领域技术人员可以理解,图3中示出的服务器结构并不构成对服务器的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。

本发明还提出一种计算机可读存储介质,其上存储有计算机程序。所述计算机可读存储介质可以是图3的服务器中的存储器20,也可以是如rom(read-onlymemory,只读存储器)/ram(randomaccessmemory,随机存取存储器)、磁碟、光盘中的至少一种,所述计算机可读存储介质包括若干指令用以使得一台具有处理器的终端设备(可以是电视,汽车,手机,计算机,服务器,终端,或者网络设备等)执行本发明各个实施例所述的方法。

在本发明中,术语“第一”“第二”“第三”“第四”“第五”仅用于描述的目的,而不能理解为指示或暗示相对重要性,对于本领域的普通技术人员而言,可以根据具体情况理解上述术语在本发明中的具体含义。

在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。

尽管上面已经示出和描述了本发明的实施例,本发明保护的范围并不局限于此,可以理解的是,上述实施例是示例性的,不能理解为对本发明的限制,本领域的普通技术人员在本发明的范围内可以对上述实施例进行变化、修改和替换,这些变化、修改和替换都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。

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