发明内容
本发明的主要目的在于解决现有技术中存在的问题,提供一种用于服务器自适应自反馈的多线程控制方法及系统,基于对可变参数的数学模型的控制,使系统在运行过程中不断完善有关模型,从而合理利用服务器的硬件资源。
本发明的目的是通过下述技术方案予以实现的:
一种用于服务器自适应自反馈的多线程控制方法,其特征在于,包括:
设置事件,在线程池中查找处于低负载状态的线程,并将待设置事件绑定至该线程;
等待事件,监控事件触发条件是否满足,当事件触发条件满足后,进入处理事件过程;
处理事件,被绑定线程执行所述事件,完成该事件任务;以及
释放事件,从该被绑定线程中释放执行完成的事件。
在所述设置事件过程完成后,还包括有对线程池负载状况的更新步骤:
将所设置事件的负载量增加到所绑定线程的负载量上,以更新设置后的该线程的总负载量Lt;单线程的总负载量计算公式为:其中,Ei为第i个事件负载权重;n为该线程中的事件个数;
根据该更新后的该线程的总负载量Lt,更新计算线程池的平均负载量Ap;线程池的平均负载量公式为:其中,Ap为线程池的平均负载量,m为线程池中的线程个数。
在所述释放事件过程完成后,还包括有对线程池负载状况的更新步骤:
将所释放事件的负载量从所绑定线程的负载量上删除,以更新设置后的该线程的总负载量Lt;单线程的总负载量计算公式为:其中,Ei为第i个事件负载权重;n为该线程中的事件个数;
根据该更新后的该线程的总负载量Lt,更新计算线程池的平均负载量Ap;线程池的平均负载量公式为:其中,Ap为线程池的平均负载量,m为线程池中的线程个数。
所述事件分为:读事件、写事件、更新事件、创建事件、关闭事件、空闲事件、超时事件、销毁事件八种基本事件类型;根据各个事件类型的不同定义不同的事件负载权重。
在所述设置事件过程中,线程是否处于低负载状态是通过负载匹配条件判断的;所述负载匹配条件为:Lt<Ap+P;其中,Lt为该线程的总负载量,Ap为线程池的平均负载量,P为线程匹配阀值。
所述服务器查找线程负载状况的方式是采用依序循环轮询的方式。
所述等待事件过程中的事件触发条件为用户指令触发和/或前置事件触发条件。
一种用于服务器自适应自反馈的多线程控制系统,其特征在于,包括:设置事件模块、等待事件模块、处理事件模块和释放事件模块;
所述设置事件模块,用于在线程池中查找处于低负载状态的线程,并将待设置事件绑定至该线程;
所述等待事件模块,用于监控事件触发条件是否满足,当事件触发条件满足后,进入处理事件过程;
所述处理事件模块,用于使被绑定线程执行所述事件,完成该事件任务;以及
所述释放事件模块,用于从该被绑定线程中释放执行完成的事件。
还设有线程池负载状况计算模块;所述线程池负载状况计算模块包括有:线程负载计算模块,线程总负载量存储模块和线程池平均负载量存储模块;
所述线程总负载量存储模块,用于存储各个单线程的总负载量;
所述线程池平均负载量存储模块,用于存储线程池的平均负载量;
所述线程负载计算模块,用于根据设置或释放的事件的事件负载权重计算该事件所绑定线程更新后的总负载量Lt,并将计算结果存储于线程总负载量存储模块中,单线程的总负载量计算公式为:其中,Ei为第i个事件负载权重,n为该线程中的事件个数;以及根据线程总负载量存储模块中存储的各个单线程的总负载量计算线程池的平均负载量,并存储于线程池平均负载量存储模块,线程池的平均负载量公式为:其中,Ap为线程池的平均负载量,m为线程池中的线程个数。
所述事件分为:读事件、写事件、更新事件、创建事件、关闭事件、空闲事件、超时事件、销毁事件八种基本事件类型;根据各个事件类型的不同定义不同的事件负载权重。
所述设置事件模块中设有线程匹配模块;所述线程匹配模块,用于通过负载匹配条件判断线程是否处于低负载状态,并将待设置事件绑定至处于低负载状态的线程;所述负载匹配条件为:Lt<Ap+P;其中,Lt为该线程的总负载量,Ap为线程池的平均负载量,P为线程匹配阀值。
该线程匹配模块查找线程负载状况的方式是采用依序循环轮询的方式。
所述等待事件模块中的事件触发条件为用户指令触发和/或前置事件触发条件。
通过本发明实施例所提供的低负载状态线程的判断机制、对线程池负载状况的实时更新以及以实时事件为单位进行处理,使得服务器在多线程控制中保持线程池中的各个线程将在一个相对比较平衡的负载状况下进行工作,避免了因服务器的硬件资源分配不平衡,造成服务器特性变化起伏较大的问题。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,下面结合实施方式和附图,对本发明做进一步详细说明。在此,本发明的示意性实施方式及其说明用于解释本发明,但并不作为对本发明的限定。
现有的流媒体服务器上的多线程控制方法大多是以面向用户的服务为单位,将一项服务分配至一个线程来进行处理。然而,一项服务的流程往往非常长,且服务间的负载差异较大。因此,这样的多线程控制方法容易造成系统内部特性变化或者外部扰动的变化幅度很大,系统的性能就会下降,服务器的硬件资源利用不合理的问题。针对这一问题,本发明提出以实时事件作为服务流程的最小单位,通过大量不同实时事件的有序组合,完成具体服务的流程实现。具体服务流程通过分解为更小的实时事件,使得代码执行单位可以更小,从而可以为高细度的控制分配线程任务提供支持。
图1为本发明实施例用于服务器自适应自反馈的多线程控制方法的流程图。如图所示,该多线程控制方法对于实时事件在线程池中的控制分为:设置事件、等待事件、处理事件和释放事件四个阶段,具体为:
设置事件,在线程池中查找处于低负载状态的线程,并将待设置事件绑定至该线程。
等待事件,监控事件触发条件是否满足,当事件触发条件满足后,进入处理事件过程。
处理事件,被绑定线程执行所述事件,完成该事件任务。
释放事件,从该被绑定线程中释放执行完成的事件。
通过上述控制方法,我们可以将一项流程非常长的服务划分为多个不同的实时事件,在线程池中分别匹配执行线程,并且通过查找处于低负载状态的线程,使得服务器的硬件资源分配更为平衡,避免造成服务器特性变化的大幅度起伏。
而在线程池对实时事件的整个控制流程中,本发明采用了动态计算线程池负载状况自适应自反馈的方式。
具体的,如图2所示,在设置事件过程完成后,该多线程控制方法还包括有对线程池负载状况的更新步骤,具体为:
将所设置事件的负载量增加到所绑定线程的负载量上,以更新设置后的该线程的总负载量Lt;单线程的总负载量计算公式为:其中,Ei为第i个事件负载权重;n为该线程中的事件个数。
根据该更新后的该线程的总负载量Lt,更新计算线程池的平均负载量。线程池的平均负载量公式为:其中,Ap为线程池的平均负载量,m为线程池中的线程个数。
如图3所示,在释放事件过程完成后,该多线程控制方法还包括有对线程池负载状况的更新步骤,具体为:
将所释放事件的负载量从所绑定线程的负载量上删除,以更新设置后的该线程的总负载量Lt;单线程的总负载量计算公式为:其中,Ei为第i个事件负载权重;n为该线程中的事件个数。
根据该更新后的该线程的总负载量Lt,更新计算线程池的平均负载量。线程池的平均负载量公式为:其中,Ap为线程池的平均负载量,m为线程池中的线程个数。
另外,还应指出,本发明根据各个事件所要完成的不同功能对事件进行分类,并根据不同类型事件的重要性不同对其分别定义不同的事件负载权重。参见表1:
事件名称 |
事件代码 |
事件负载权重 |
发生系数 |
备注 |
读事件 |
TASK_READ_EVENT |
(0x01<<0x00)=1 |
64/128 |
Read |
写事件 |
TASK_WRITE_EVENT |
(0x01<<0x01)=2 |
16/128 |
Write |
创建事件 |
TASK_START_EVENT |
(0x01<<0x02)=4 |
6/128 |
Start |
关闭事件 |
TASK_Stop_EVENT |
(0x01<<0x03)=8 |
6/128 |
Stop |
超时事件 |
TASK_TIMEOUT_EVENT |
(0x01<<0x04)=16 |
2/128 |
Timeout |
销毁事件 |
TASK_KILL_EVENT |
(0x01<<0x05)=32 |
1/128 |
Kill |
更新事件 |
TASK_UPDATE_EVENT |
(0x01<<0x06)=64 |
32/128 |
Update |
空闲事件 |
TASK_IDLE_EVENT |
(0x01<<0x07)=128 |
1/128 |
Idle |
表1
如上表所示,本发明共把事件按功能分为:读事件,写事件,更新事件,创建事件,关闭事件,空闲事件,超时事件,销毁事件八种基本事件类型。并且,根据各个事件类型的不同定义了不同的事件负载权重。
当然,上述表1仅给出了本发明一种可行的事件类型划分及事件负载权重的分配方案。而在实际应用中,可以对事件类型划分及事件负载权重分配进行灵活调整,以适应实际设计需要。因此,本发明的保护范围并不应以上述表1所给出的事件类型划分及事件负载权重的分配方案为限。
通过上述在设置事件及释放事件过程后对线程池负载状况的实时更新,该服务器实现对线程池负载状况的自适应自反馈控制,从而为更好的查找处于低负载状态的线程,以平衡服务器的硬件资源分配建立基础。并且,通过对事件类型划分及事件负载权重的灵活分配,使得该技术方案具有对事件处理优先级进行优化分配的能力,从而可以获得更符合用户需要的服务器工作性能。
在所述设置事件过程中,线程是否处于低负载状态是通过负载匹配条件判断的。所述负载匹配条件为:Lt<Ap+P;其中,Lt为该线程的总负载量,Ap为线程池的平均负载量,P为线程匹配阀值。该线程匹配阀值P为人为设定值。当服务器找到一个符合该负载匹配条件的线程时,即认为该线程处于低负载状态,则将该待设置事件绑定至该线程。
其中,服务器查找线程负载状况的方式是采用依序循环轮询的方式,即按照线程的地址顺序依次循环查找。当找到符合负载匹配条件的线程时,即将待设置事件绑定至该线程,直至该线程不再符合负载匹配条件,则依序查找下一个线程。
由于,上述给出的低负载状态线程的判断机制,以及前述本发明在设置事件及释放事件过程后对线程池负载状况的实时更新,并且本发明是以较小的实时事件为单位进行处理的。因此,不难看出,通过本发明所设计的多线程控制方法进行线程控制,服务器的线程池中的各个线程将在一个相对比较平衡的负载状况下进行工作,避免了因服务器的硬件资源分配不平衡,造成服务器特性变化起伏较大的问题。
另外,所述等待事件过程中的事件触发条件并不仅由用户指令触发,也可以由前置事件触发。这样,用户在使用时并不会因为该服务器以实时事件为单位进行处理而感觉有何不便,当存在多个事件之间存在逻辑顺序时,则后置事件可以由前置事件的处理完成而触发执行,从而为用户提供连贯的事件处理。
图4为本发明实施例用于服务器自适应自反馈的多线程控制系统的结构示意图。如图所示,该多线程控制系统包括:设置事件模块、等待事件模块、处理事件模块和释放事件模块。
所述设置事件模块,用于在线程池中查找处于低负载状态的线程,并将待设置事件绑定至该线程。
所述等待事件模块,用于监控事件触发条件是否满足,当事件触发条件满足后,进入处理事件过程。
所述处理事件模块,用于使被绑定线程执行所述事件,完成该事件任务。
所述释放事件模块,用于从该被绑定线程中释放执行完成的事件。
通过上述控制系统,我们可以将一项流程非常长的服务划分为多个不同的实时事件,在线程池中分别匹配执行线程,并且通过查找处于低负载状态的线程,使得服务器的硬件资源分配更为平衡,避免造成服务器特性变化的大幅度起伏。
对应图2、图3所示对线程池负载状况的更新步骤,在该多线程控制系统中还设有线程池负载状况计算模块。所述线程池负载状况计算模块包括有:线程负载计算模块,线程总负载量存储模块和线程池平均负载量存储模块。
所述线程总负载量存储模块,用于存储各个单线程的总负载量。
所述线程池平均负载量存储模块,用于存储线程池的平均负载量。
所述线程负载计算模块,用于根据设置或释放的事件的事件负载权重计算该事件所绑定线程更新后的总负载量Lt,并将计算结果存储于线程总负载量存储模块中相应位置,单线程的总负载量计算公式为:其中,Ei为第i个事件负载权重;n为该线程中的事件个数;以及根据线程总负载量存储模块中存储的各个单线程的总负载量计算线程池的平均负载量,并存储于线程池平均负载量存储模块,线程池的平均负载量公式为:其中,Ap为线程池的平均负载量,m为线程池中的线程个数。
所述事件按功能分为:读事件,写事件,更新事件,创建事件,关闭事件,空闲事件,超时事件,销毁事件八种基本事件类型。并且,根据各个事件类型的不同定义了不同的事件负载权重。
通过上述线程池负载状况计算模块对线程池负载状况的实时更新,该服务器实现对线程池负载状况的自适应自反馈控制,从而为更好的查找处于低负载状态的线程,以平衡服务器的硬件资源分配建立基础。并且,通过对事件类型划分及事件负载权重的灵活分配,使得该技术方案具有对事件处理优先级进行优化分配的能力,从而可以获得更符合用户需要的服务器工作性能。
所述设置事件模块中设有线程匹配模块。所述线程匹配模块,用于通过负载匹配条件判断线程是否处于低负载状态,并将待设置事件绑定至处于低负载状态的线程。所述负载匹配条件为:Lt<Ap+P;其中,Lt为该线程的总负载量,Ap为线程池的平均负载量,P为线程匹配阀值。
其中,该线程匹配模块查找线程负载状况的方式是采用依序循环轮询的方式,即按照线程的地址顺序依次循环查找。
由于,上述线程匹配模块所提供的低负载状态线程的判断机制,以及前述线程池负载状况计算模块对线程池负载状况的实时更新,并且本发明是以较小的实时事件为单位进行处理的。因此,不难看出,通过本发明所设计的多线程控制系统进行线程控制,服务器的线程池中的各个线程将在一个相对比较平衡的负载状况下进行工作,避免了因服务器的硬件资源分配不平衡,造成服务器特性变化起伏较大的问题。
另外,所述等待事件模块中的事件触发条件并不仅由用户指令触发,也可以由前置事件触发。这样,用户在使用时并不会因为该服务器以实时事件为单位进行处理而感觉有何不便,当存在多个事件之间存在逻辑顺序时,则后置事件可以由前置事件的处理完成而触发执行,从而为用户提供连贯的事件处理。
综上所述,本发明所提供的用于服务器自适应自反馈的多线程控制方法及系统,通过低负载状态线程的判断机制、对线程池负载状况的实时更新以及以实时事件为单位进行处理,使得服务器的线程池中的各个线程将在一个相对比较平衡的负载状况下进行工作,避免了因服务器的硬件资源分配不平衡,造成服务器特性变化起伏较大的问题。本领域一般技术人员在此设计思想之下所做任何不具有创造性的改造,均应视为在本发明的保护范围之内。