CN109413502B - 多线程弹幕消息分发方法、装置、设备及存储介质 - Google Patents
多线程弹幕消息分发方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN109413502B CN109413502B CN201811151401.1A CN201811151401A CN109413502B CN 109413502 B CN109413502 B CN 109413502B CN 201811151401 A CN201811151401 A CN 201811151401A CN 109413502 B CN109413502 B CN 109413502B
- Authority
- CN
- China
- Prior art keywords
- bullet screen
- current
- target
- message
- distribution
- 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
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N21/00—Selective content distribution, e.g. interactive television or video on demand [VOD]
- H04N21/40—Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
- H04N21/47—End-user applications
- H04N21/478—Supplemental services, e.g. displaying phone caller identification, shopping application
- H04N21/4788—Supplemental services, e.g. displaying phone caller identification, shopping application communicating with other users, e.g. chatting
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N21/00—Selective content distribution, e.g. interactive television or video on demand [VOD]
- H04N21/40—Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
- H04N21/43—Processing of content or additional data, e.g. demultiplexing additional data from a digital video stream; Elementary client operations, e.g. monitoring of home network or synchronising decoder's clock; Client middleware
- H04N21/435—Processing of additional data, e.g. decrypting of additional data, reconstructing software from modules extracted from the transport stream
Abstract
本发明实施例公开了一种多线程弹幕消息分发方法、装置、设备及存储介质。该方法包括:在满足多线程弹幕分发条件时,依据当前系统状态参数值确定弹幕消息的当前并发数量;从消息集合中获取所述当前并发数量的目标弹幕消息,并确定所述当前并发数量的目标线程;利用各个所述目标线程,基于弹幕消息分发机制,并行分发各个所述目标弹幕消息。通过上述技术方案,实现了弹幕消息的高效分发,提高了弹幕消息的分发时效性。
Description
技术领域
本发明实施例涉及信息通信技术,尤其涉及一种多线程弹幕消息分发方法、装置、设备及存储介质。
背景技术
在音视频播放/直播应用软件中会大量使用弹幕消息。通常,弹幕消息是由传输及处理弹幕消息的服务器(即弹幕服务器)发送至应用软件,再由应用软件中具有分发弹幕消息功能的弹幕分发模块将接收的弹幕消息分发至各个需要接收弹幕消息的弹幕接收模块。
当弹幕服务器发送的弹幕消息的数量较多,而弹幕分发模块无法及时进行弹幕消息的分发时,通常会在弹幕分发模块中建立一个消息集合,以存储未分发的弹幕消息。
但是,现有的弹幕消息分发模式是弹幕分发模块按照弹幕服务器下发弹幕消息的顺序,逐条从消息缓存集合中获取缓存的弹幕消息并进行分发,这就会导致弹幕分发模块的分发效率低,降低弹幕消息的分发时效性。
发明内容
本发明实施例提供一种多线程弹幕消息分发方法、装置、设备及存储介质,以实现弹幕消息的高效分发,提高弹幕消息的分发时效性。
第一方面,本发明实施例提供了一种多线程弹幕消息分发方法,包括:
在满足多线程弹幕分发条件时,依据当前系统状态参数值确定弹幕消息的当前并发数量;
从消息集合中获取所述当前并发数量的目标弹幕消息,并确定所述当前并发数量的目标线程;
利用各个所述目标线程,基于弹幕消息分发机制,并行分发各个所述目标弹幕消息。
第二方面,本发明实施例还提供了一种多线程弹幕消息分发装置,该装置包括:
当前并发数量确定模块,用于在满足多线程弹幕分发条件时,依据当前系统状态参数值确定弹幕消息的当前并发数量;
目标线程确定模块,用于从消息集合中获取所述当前并发数量的目标弹幕消息,并确定所述当前并发数量的目标线程;
弹幕消息分发模块,用于利用各个所述目标线程,基于弹幕消息分发机制,并行分发各个所述目标弹幕消息。
第三方面,本发明实施例还提供了一种设备,该设备包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现本发明任意实施例所提供的多线程弹幕消息分发方法。
第四方面,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现本发明任意实施例所提供的多线程弹幕消息分发方法。
本发明实施例通过在满足多线程弹幕分发条件时,依据当前系统状态参数值确定弹幕消息的当前并发数量;从消息集合中获取当前并发数量的目标弹幕消息,并确定当前并发数量的目标线程;利用各个目标线程,基于弹幕消息分发机制,并行分发各个目标弹幕消息。在利用弹幕消息并行分发技术提高弹幕消息分发效率的基础上,实现了根据系统状态动态地确定弹幕消息并行分发的数量,有效降低因系统繁忙而导致弹幕消息并行分发进程的阻塞程度,进一步提高了弹幕消息的分发效率和分发时效性。
附图说明
图1是本发明实施例一中的一种多线程弹幕消息分发方法的流程图;
图2是本发明实施例二中的一种多线程弹幕消息分发方法的流程图;
图3是本发明实施例三中的一种多线程弹幕消息分发装置的结构示意图;
图4是本发明实施例四中的一种设备的结构示意图。
具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
实施例一
本实施例提供的多线程弹幕消息分发方法可适用于Android客户端中的音视频播放/直播应用软件中的弹幕消息分发,尤其适用于在弹幕消息数量较多,且一条弹幕消息仅发送至一个弹幕接收对象的情况。该方法可以由多线程弹幕消息分发装置来执行,该装置可以由软件和/或硬件的方式实现,该装置可以集成在搭载Android系统的具有弹幕消息分发功能的设备中,例如典型的是用户终端设备,例如手机、平板电脑或智能电视等。参见图1,本实施例的方法具体包括如下步骤:
S110、在满足多线程弹幕分发条件时,依据当前系统状态参数值确定弹幕消息的当前并发数量。
其中,多线程弹幕分发条件是指预先设定的,用于触发弹幕消息多线程并行分发的条件,例如可以是新的弹幕消息的接收,也可以是弹幕消息分发进度,还可以是设置定时器等。系统状态参数是指能够表征系统运行状态的参数。当前系统状态参数是指本操作执行时刻(即当前时刻)的系统状态参数。当前系统状态参数值是指当前系统状态参数的值。并发数量是指并行分发的弹幕消息的数量。当前并发数量是指当前时刻的并发数量。
示例性地,当前系统状态参数包括当前CPU占用率、当前内存占用率和当前系统温度中的至少一种。其中,当前CPU占用率是指当前时刻Android客户端的系统CPU使用率。当前内存占用率是指当前时刻Android客户端的系统内存的使用率。当前系统温度是指当前时刻搭载Android客户端的设备的温度。具体实施时,可以利用当前CPU占用率、当前内存占用率和当前系统温度中的至少一种来表征当前Android系统的运行状态。这样设置的好处在于可以从至少一个角度反映当前系统的繁忙程度。
具体地,本操作执行时,弹幕分发模块对应的弹幕分发对象首先判断是否满足多线程弹幕分发条件。例如,弹幕分发对象判断其是否接收到弹幕服务器发送的新的弹幕消息,或者判断其是否将上一批弹幕消息分发完毕,或者判断设置的定时器的定时周期是否到达等,如果判断结果为是,那说明已经满足了多线程弹幕分发条件。此时,弹幕分发对象需要获取当前系统状态参数值,例如当前CPU占用率、当前内存占用率和当前系统温度中的至少一种当前系统状态参数的值。如果当前系统状态参数值较高,则表明系统当前功耗较大,系统较为繁忙,当前可用系统资源较少,无法承担过多的并行弹幕分发任务,此时便可将当前并发数量设置为一个较小的数值;反之,表明系统的当前可用资源丰富,可以承担较多的并行弹幕分发任务,此时便可将当前并发数量设置为一个较大的数值。
本实施例中可以将系统状态参数值与弹幕消息的并发数量的对应关系设置为具有离散数值的查找表,以系统状态参数为CPU占用率为例,该查找表便可以如表1中所示,在查找表中存储系统状态参数值的各个取值范围及每个取值范围对应的并发数量。
表1系统状态参数值与并发数量的查找表
CPU占用率(%)(系统状态参数值) | 并发数量(个) |
0-20 | 9或10 |
21-40 | 7或8 |
41-60 | 5或6 |
61-80 | 3或4 |
81-100 | 1或2 |
那么,上述依据当前系统状态参数值确定弹幕消息的当前并发数量的过程便为:根据当前系统状态参数值确定出其对应的取值范围,如当前系统状态值为CPU占用率10%,则确定其对应的取值范围为0%-20%,之后将查找表中该取值范围对应的并发数量确定为当前并发数量,即为9或10。这样设置的好处在于当前并发数量的确定速度快,可进一步提高弹幕消息的分发效率。
本实施例中也可以将系统状态参数值与弹幕消息的并发数量的对应关系设置为数值计算公式,将系统状态参数值设置为因变量,而将并发数量设置为应变量。后续便可以直接根据当前系统状态参数值计算获得相应的当前并发数量。这样设置的好处在于,可以更加精确的确定当前并发数量,从而后续确定更加合适数量的并发线程,可进一步减少线程阻塞的情况,进而进一步提高弹幕消息的分发效率。
S120、从消息集合中获取当前并发数量的目标弹幕消息,并确定当前并发数量的目标线程。
其中,消息集合是指弹幕分发对象中存储弹幕消息的集合,其数据结构可以是数组、列表或队列等。为了更好地保证弹幕消息的存储顺序及后续弹幕消息获取顺序,消息集合优选为具有先进先出特性的队列结构。目标弹幕消息是指本操作中要进行分发的弹幕消息。目标线程是指本操作中需要用来进行弹幕消息分发的线程。
具体地,为了实现弹幕消息的并行分发,弹幕分发对象在接收到弹幕服务器下发的弹幕消息时,并不是立即将其分发,而是将其存储至消息集合中。当执行S110确定了当前并发数量之后,弹幕分发对象便从消息集合中获取当前并发数量的弹幕消息,作为目标弹幕消息。为了保证弹幕接收对象中弹幕消息的顺序性,本实施例中优选是弹幕分发对象从消息集合中按照弹幕消息的接收顺序确定目标弹幕消息。若消息集合为队列结构,那么弹幕分发对象从消息集合中获取弹幕消息时便自动按照弹幕消息的接收顺序执行。上述弹幕接收对象是指弹幕接收模块中需要接收弹幕消息的组件对象,例如可以是用于弹幕消息显示的视图对象,也可以是用于对弹幕消息进行数据处理的业务控制器对象,还可以是对弹幕消息进行存储或传输的数据管理器对象。
在确定了当前并发数量之后,弹幕分发对象便可以确定出当前并发数量的线程作为目标线程。具体实施时,弹幕分发对象依据当前并发数量从线程池获取当前并发数量的目标线程。该线程池会对系统中的所有线程进行动态管理。或者,弹幕分发对象按照如下方式确定当前并发数量的目标线程:获取已开辟线程的第一线程数量,并比较当前并发数量与第一线程数量;若当前并发数量大于第一线程数量,则依据当前并发数量和第一线程数量开辟第二线程数量的新开辟线程,并将已开辟线程和新开辟线程确定为目标线程;若当前并发数量等于第一线程数量,则将已开辟线程确定为目标线程;若当前并发数量小于第一线程数量,则从已开辟线程中随机确定当前并发数量的线程,作为目标线程。这样设置的好处在于充分利用已开辟线程,减少线程开辟与释放的次数,从而减少系统功耗。
需要说明的是,本步骤中确定目标弹幕消息的操作和确定目标线程的操作无执行顺序的限定,可以先确定目标弹幕消息后确定目标线程,也可以先确定目标线程后确定目标弹幕消息,还可以同时执行目标弹幕消息和目标线程的确定操作。
S130、利用各个目标线程,基于弹幕消息分发机制,并行分发各个目标弹幕消息。
其中,弹幕消息分发机制是指弹幕分发对象向弹幕接收对象分发弹幕消息的实现机制。例如当弹幕分发对象和弹幕接收对象处于同一个功能模块时,弹幕消息分发机制可以是通过弹幕分发对象和弹幕接收对象之间的直接对象引用来进行弹幕消息分发。而当弹幕分发对象和弹幕接收对象处于不同功能模块时,弹幕消息分发机制可以是通过不同功能模块提供的模块间交互接口来建立弹幕分发对象和弹幕接收对象之间的耦合式通信通道,弹幕分发对象通过该耦合式通信通道将弹幕消息直接分发至相应的弹幕接收对象;也可以是通过自定义接口类型的通信协议建立弹幕分发对象和弹幕接收对象之间的桥接通信通道,弹幕分发对象通过该桥接通信通道将弹幕消息直接分发至相应的弹幕接收对象;还可以是通过Android系统中的系统通信通道,如系统广播通道或第三方开源事件总线EventBus,进行弹幕消息的传输。
具体地,对于上述确定的各个目标弹幕消息和各个目标线程,弹幕分发对象在基于弹幕消息分发机制执行弹幕消息分发时,是利用一个目标线程独立分发一条目标弹幕消息,并且是多个目标线程同时执行弹幕分发操作,从而实现各个目标弹幕消息的并行分发。
本实施例的技术方案,通过在满足多线程弹幕分发条件时,依据当前系统状态参数值确定弹幕消息的当前并发数量;从消息集合中获取当前并发数量的目标弹幕消息,并确定当前并发数量的目标线程;利用各个目标线程,基于弹幕消息分发机制,并行分发各个目标弹幕消息。在利用弹幕消息并行分发技术提高弹幕消息分发效率的基础上,实现了根据系统状态动态地确定弹幕消息并行分发的数量,有效降低因系统繁忙而导致弹幕消息并行分发进程的阻塞程度,进一步提高了弹幕消息的分发效率和分发时效性。
实施例二
本实施例在上述实施例一的基础上,对“满足多线程弹幕分发条件”进行了进一步优化。在此基础上,可以进一步对“依据当前系统状态参数值确定弹幕消息的当前并发数量”进行优化。在上述基础上,还可以进一步对“弹幕消息分发机制”进行优化。其中与上述各实施例相同或相应的术语的解释在此不再赘述。参见图2,本实施例提供的多线程弹幕消息分发方法包括:
S210、在消息并发定时器的当前定时周期到达时,按照以下公式依据当前CPU占用率确定当前并发数量:
ParaNum=10-(int)(CpuOcRate*100/10)
其中,ParaNum为当前并发数量,int为取整关键字,CpuOcRate为当前CPU占用率。
其中,消息并发定时器是用于触发弹幕消息多线程并行分发的定时器。当前定时周期是指当前时刻消息并发定时器的定时时长,其可以是预先设置的固定数值的时长(即预设时长),也可以是依据设定调整规则动态调整的动态时长。该设定调整规则是预先设定的定时周期调整的规则,其可以是诸如系统状态参数的时长调整依据,也可以是诸如以等差或等比等规律变动的时长调整间隔等。
示例性地,当前定时周期依据当前并发数量的上一个历史并发数量确定。历史并发数量是指当前时刻之前的历史时刻的并发数量,其与当前并发数量相对应。上一个历史并发数量是指与当前时刻最接近的历史时刻的并发数量。具体实施时,在上一个历史并发数量确定之后,便可据其确定当前定时周期。本实施例中将当前定时周期与上一个历史并发数量的关系设定为负相关关系,如果上一个历史并发数量较大,则说明当前可用系统资源丰富,可以认为弹幕消息的分发速度较快,那么可以设置一个时长较短的当前定时周期,以便更加及时地分发各个弹幕消息;反之,如果上一个历史并发数量较小,则说明当前可用系统资源不足,可以认为弹幕消息的分发速度较慢,那么可以设置一个时长较长的当前定时周期,以确保上一批并行分发的弹幕消息能够分发完毕,避免因多批弹幕消息并行分发而导致的系统功耗过大。应当理解的是,当前定时周期是一次分发过程调整一次,且是在一次S110~S130的分发过程执行之前便确定。这样设置的好处在于能够根据当前系统运行状态动态地确定消息并发定时器的当前定时周期,从而更加精确地触发弹幕消息的并行分发,进一步提高弹幕消息的分发效率和时效性。
具体地,弹幕分发对象首先判断消息并发定时器的当前定时周期是否达到。在判断达到时,弹幕分发对象获取Android系统的当前CPU占用率。之后,弹幕分发对象根据当前CPU占用率与当前并发数量之间的数值计算公式计算当前并发数量。上述数值计算公式具体为:
ParaNum=10-(int)(CpuOcRate*100/10)
该公式中ParaNum为当前并发数量,int为取整关键字,CpuOcRate为当前CPU占用率。该公式的构建依据是:为了避免一次开辟的线程数量过多,本实施例中将一次开辟的线程数量最大值设置为10,也就是系统可用资源允许的情况下,最多一次可并行分发10条弹幕消息。然后,将百分比形式的当前并发数量CpuOcRate变为实数,即CpuOcRate*100;之后,为了确保最终确定的并发数量为小于或等于10的数值,而取上述获得的实数的十位及以上的数值,即CpuOcRate*100/10;同时为了确保计算结果为整数,利用int取整关键字对上述结果再向下取整。最后,为了使CPU占用率与并发数量呈负相关,从而符合S110中的相关说明,用并发数量最大值10与取整后结果做差。例如,当前CPU占用率为15%时,可以计算确定当前并发数量为9。
S220、从消息集合中获取当前并发数量的目标弹幕消息,并确定当前并发数量的目标线程。
S230、在每个目标线程中,以目标线程对应的线程目标弹幕消息为函数输入参数,通过预先持有的目标接收对象调用弹幕分发函数,将线程目标弹幕消息分发至目标接收对象。
其中,目标接收对象是用于接收目标弹幕消息的接收协议对象,其是由继承了弹幕分发协议的弹幕接收类的实例化对象——弹幕接收对象转换而来,但是仅具有弹幕分发协议的通信功能。可知,目标接收对象与弹幕接收对象具有一一对应关系。这里弹幕分发协议是指是Android客户端的音视频播放/直播应用软件中预先定义的,弹幕分发对象进行弹幕分发时所遵循的组件间通信协议,其内包含用于实现弹幕消息分发的弹幕分发函数。该弹幕分发协议是具有公有权限标识符public的接口interface类型的协议。例如,弹幕分发协议IMessage可以定义为:
public interface IMessage{
public void onMessage(String type,Message msg);
}。
该协议定义中,弹幕分发函数onMessage具有两个函数输入参数,分别是字符串String类型的消息标识和消息Message类型的消息体。消息标识是指能够标识弹幕消息的字符,其可以是数字、字母、符号及上述各种字符的任意组合,该消息标识应当是一条弹幕消息的唯一的、全局的标识。消息体是指弹幕消息的承载者,其内包含具体地弹幕消息内容。该函数的函数输入参数可以根据实际应用需求进行适应性调整。
由上述说明可知,通过Java语言中的接口协议继承关键字implement继承了弹幕分发协议的弹幕接收类中必然包含且实现了弹幕分发函数,那么弹幕接收类的实例化对象——弹幕接收对象中也必然包含弹幕分发函数。即弹幕分发函数为与目标接收对象对应的弹幕接收对象基于弹幕分发协议而获得。
线程目标弹幕消息是指一个线程中要分发的目标弹幕消息。本发明实施例中目标线程与目标弹幕消息之间没有严格的对应关系,只要保证一个目标线程对应有一个目标弹幕消息,且各个目标线程对应的目标弹幕消息不重复即可。但是,一个弹幕接收对象有其需要接收的弹幕消息,故目标弹幕消息与弹幕接收对象之间存在严格的对应关系,该对应关系可以通过弹幕消息的消息标识来确定。这样,上述目标接收对象便与线程目标弹幕消息一一对应。
具体地,本实施例中弹幕分发对象和弹幕接收对象处于不同功能模块,故将弹幕消息分发机制设置为建立弹幕分发对象和弹幕接收对象之间的桥接通信通道,弹幕分发对象通过该桥接通信通道将弹幕消息直接分发至相应的弹幕接收对象,这样设置的好处在于建立了弹幕分发对象和弹幕接收对象之间专门用于弹幕消息分发的通信通道,进一步提高弹幕消息的分发效率。
上述桥接通信通道是通过如下方式预先建立:预先定义包含弹幕分发函数的弹幕分发协议,并使弹幕接收类继承该弹幕分发协议。然后,在各个弹幕接收对象创建时,通过调用弹幕接收类的构造函数实例化生成各个弹幕接收对象,该弹幕接收对象同时也是协议接收对象,其内包含作为回调函数的弹幕分发函数OnMessage。在各个弹幕接收对象创建之后,将其注册至弹幕分发对象,使得弹幕分发对象持有各个弹幕接收对象的引用关系,至此便构建了上述桥接通信通道。
具体实施时,对于每一个目标线程均是采用上述桥接通信通道进行弹幕消息的分发。对于一个目标线程,弹幕分发对象通过目标接收对象调用弹幕分发函数,将该目标线程对应的线程目标弹幕消息以函数输入参数的形式传输至目标接收对象。
示例性地,在以目标弹幕消息为函数输入参数,通过预先持有的目标接收对象调用弹幕分发函数,将目标线程对应的线程目标弹幕消息分发至目标接收对象之前,还包括:依据线程目标弹幕消息的目标消息标识,从对象集合中获取与目标消息标识对应的弹幕接收对象;依据弹幕分发协议,将弹幕接收对象转换为接收协议对象,作为目标接收对象。
其中,目标消息标识是指线程目标弹幕消息的消息标识。对象集合是指存储各个弹幕接收对象引用关系的集合,其设置于弹幕分发对象中。
具体地,在执行S230之前需要预先将弹幕接收对象注册至弹幕分发对象,本实施例中将注册方式设置为将弹幕接收对象存储至对象集合的方式。具体实施时,在每个弹幕接收对象创建后,调用对象集合的元素添加函数,如对象集合为列表list时,调用其元素添加函数add(),将弹幕接收对象存储至对象集合中。
根据上述说明可知,在执行S230之前需要获取目标接收对象,其获取过程便为:根据线程目标弹幕消息的目标消息标识type确定需要接收该弹幕消息的弹幕接收对象的对象标识。然后,根据该对象标识从对象集合中获取上述确定的弹幕接收对象,该弹幕接收对象同时具有弹幕分发协议的通信功能。之后,为了后续调用时仅利用该通信功能,而不会调用弹幕接收对象内部的相应功能,根据弹幕分发协议对应的弹幕分发协议类型,将弹幕接收对象强制转换为弹幕分发协议类型,获得仅具有弹幕分发协议的通信功能的接收协议对象,将其作为目标接收对象。
本实施例的技术方案,通过将多线程弹幕分发条件设置为消息并发定时器的当前定时周期到达,使得弹幕消息并行分发的触发条件更加常态化,避免了因触发条件无法满足而使得弹幕消息无法及时分发的问题,进一步提高弹幕消息分发的时效性。通过将当前系统状态参数值确定为当前CPU占用率,并利用当前CPU占用率与当前并发数量之间的数值计算公式确定当前并发数量,提高了当前并发数量确定的准确性,从而进一步提高弹幕消息分发效率。
以下是本发明实施例提供的多线程弹幕消息分发装置的实施例,该装置与上述各实施例的多线程弹幕消息分发方法属于同一个发明构思,在多线程弹幕消息分发装置的实施例中未详尽描述的细节内容,可以参考上述多线程弹幕消息分发方法的实施例。
实施例三
本实施例提供一种多线程弹幕消息分发装置,参见图3,该装置具体包括:
当前并发数量确定模块310,用于在满足多线程弹幕分发条件时,依据当前系统状态参数值确定弹幕消息的当前并发数量;
目标线程确定模块320,用于从消息集合中获取当前并发数量的目标弹幕消息,并确定当前并发数量的目标线程;
弹幕消息分发模块330,用于利用各个目标线程,基于弹幕消息分发机制,并行分发各个目标弹幕消息。
可选地,满足多线程弹幕分发条件包括:消息并发定时器的当前定时周期到达。
可选地,当前定时周期依据当前并发数量的上一个历史并发数量确定。
可选地,当前系统状态参数包括当前CPU占用率、当前内存占用率和当前系统温度中的至少一种。
可选地,当前并发数量确定模块310具体用于:
当系统状态参数为当前CPU占用率时,按照以下公式依据当前CPU占用率确定当前并发数量:
ParaNum=10-(int)(CpuOcRate*100/10)
其中,ParaNum为当前并发数量,int为取整关键字,CpuOcRate为当前CPU占用率。
可选地,弹幕消息分发模块330具体用于:
在每个目标线程中,以目标线程对应的线程目标弹幕消息为函数输入参数,通过预先持有的目标接收对象调用弹幕分发函数,将线程目标弹幕消息分发至目标接收对象;
其中,目标接收对象与线程目标弹幕消息一一对应;弹幕分发函数为与目标接收对象对应的弹幕接收对象基于弹幕分发协议而获得,弹幕分发协议为具有公有权限标识符的接口类型的协议。
进一步地,在上述装置的基础上,该装置还包括目标接收对象确定模块,用于:
在以目标弹幕消息为函数输入参数,通过预先持有的目标接收对象调用弹幕分发函数,将目标线程对应的线程目标弹幕消息分发至目标接收对象之前,依据线程目标弹幕消息的目标消息标识,从对象集合中获取与目标消息标识对应的弹幕接收对象;
依据弹幕分发协议,将弹幕接收对象转换为接收协议对象,作为目标接收对象。
通过本发明实施例三的一种多线程弹幕消息分发装置,实现了弹幕消息的高效分发,提高了弹幕消息的分发时效性。
本发明实施例所提供的多线程弹幕消息分发装置可执行本发明任意实施例所提供的多线程弹幕消息分发方法,具备执行方法相应的功能模块和有益效果。
值得注意的是,上述多线程弹幕消息分发装置的实施例中,所包括的各个单元和模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。
实施例四
参见图4,本实施例提供了一种设备400,其包括:一个或多个处理器420;存储装置410,用于存储一个或多个程序,当一个或多个程序被一个或多个处理器420执行,使得一个或多个处理器420实现本发明实施例所提供的多线程弹幕消息分发方法,包括:
在满足多线程弹幕分发条件时,依据当前系统状态参数值确定弹幕消息的当前并发数量;
从消息集合中获取当前并发数量的目标弹幕消息,并确定当前并发数量的目标线程;
利用各个目标线程,基于弹幕消息分发机制,并行分发各个目标弹幕消息。
当然,本领域技术人员可以理解,处理器420还可以实现本发明任意实施例所提供的多线程弹幕消息分发方法的技术方案。
图4显示的设备400仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。如图4所示,该设备400包括处理器420、存储装置410、输入装置430和输出装置440;设备中处理器420的数量可以是一个或多个,图4中以一个处理器420为例;设备中的处理器420、存储装置410、输入装置430和输出装置440可以通过总线或其他方式连接,图4中以通过总线450连接为例。
存储装置410作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本发明实施例中的多线程弹幕消息分发方法对应的程序指令/模块(例如,多线程弹幕消息分发装置中的当前并发数量确定模块、目标线程确定模块和弹幕消息分发模块)。
存储装置410可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据终端的使用所创建的数据等。此外,存储装置410可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储装置410可进一步包括相对于处理器420远程设置的存储器,这些远程存储器可以通过网络连接至设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
输入装置430可用于接收输入的数字或字符信息,以及产生与设备的用户设置以及功能控制有关的键信号输入。输出装置440可包括显示屏等显示设备。
实施例五
本实施例提供一种包含计算机可执行指令的存储介质,计算机可执行指令在由计算机处理器执行时用于执行一种多线程弹幕消息分发方法,该方法包括:
在满足多线程弹幕分发条件时,依据当前系统状态参数值确定弹幕消息的当前并发数量;
从消息集合中获取当前并发数量的目标弹幕消息,并确定当前并发数量的目标线程;
利用各个目标线程,基于弹幕消息分发机制,并行分发各个目标弹幕消息。
当然,本发明实施例所提供的一种包含计算机可执行指令的存储介质,其计算机可执行指令不限于如上所述的方法操作,还可以执行本发明任意实施例所提供的多线程弹幕消息分发方法中的相关操作。
通过以上关于实施方式的描述,所属领域的技术人员可以清楚地了解到,本发明可借助软件及必需的通用硬件来实现,当然也可以通过硬件实现,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如计算机的软盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(RandomAccess Memory,RAM)、闪存(FLASH)、硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所提供的多线程弹幕消息分发方法。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。
Claims (7)
1.一种多线程弹幕消息分发方法,其特征在于,包括:
在满足多线程弹幕分发条件时,依据当前系统状态参数值确定弹幕消息的当前并发数量,所述满足多线程弹幕分发条件包括:消息并发定时器的当前定时周期到达,所述当前系统状态参数包括当前CPU占用率、当前内存占用率和当前系统温度中的至少一种,其中,所述依据当前系统状态参数值确定弹幕消息的当前并发数量包括:
当所述系统状态参数为所述当前CPU占用率时,按照以下公式依据所述当前CPU占用率确定所述当前并发数量:
ParaNum=10-(int)(CpuOcRate*100/10)
其中,ParaNum为所述当前并发数量,int为取整关键字,CpuOcRate为所述当前CPU占用率;
从消息集合中获取所述当前并发数量的目标弹幕消息,并确定所述当前并发数量的目标线程;
利用各个所述目标线程,基于弹幕消息分发机制,并行分发各个所述目标弹幕消息。
2.根据权利要求1所述的方法,其特征在于,所述当前定时周期依据所述当前并发数量的上一个历史并发数量确定。
3.根据权利要求1所述的方法,其特征在于,所述利用各个所述目标线程,基于弹幕消息分发机制,并行分发各个所述目标弹幕消息包括:
在每个所述目标线程中,以所述目标线程对应的线程目标弹幕消息为函数输入参数,通过预先持有的目标接收对象调用弹幕分发函数,将所述线程目标弹幕消息分发至所述目标接收对象;
其中,所述目标接收对象与所述线程目标弹幕消息一一对应;所述弹幕分发函数为与所述目标接收对象对应的弹幕接收对象基于弹幕分发协议而获得,所述弹幕分发协议为具有公有权限标识符的接口类型的协议。
4.根据权利要求3所述的方法,其特征在于,在所述以所述目标弹幕消息为函数输入参数,通过预先持有的目标接收对象调用弹幕分发函数,将所述目标线程对应的线程目标弹幕消息分发至所述目标接收对象之前,还包括:
依据所述线程目标弹幕消息的目标消息标识,从对象集合中获取与所述目标消息标识对应的所述弹幕接收对象;
依据所述弹幕分发协议,将所述弹幕接收对象转换为接收协议对象,作为所述目标接收对象。
5.一种多线程弹幕消息分发装置,其特征在于,包括:
当前并发数量确定模块,用于在满足多线程弹幕分发条件时,依据当前系统状态参数值确定弹幕消息的当前并发数量,所述满足多线程弹幕分发条件包括:消息并发定时器的当前定时周期到达,所述当前系统状态参数包括当前CPU占用率、当前内存占用率和当前系统温度中的至少一种,其中,所述依据当前系统状态参数值确定弹幕消息的当前并发数量包括:
当所述系统状态参数为所述当前CPU占用率时,按照以下公式依据所述当前CPU占用率确定所述当前并发数量:
ParaNum=10-(int)(CpuOcRate*100/10)
其中,ParaNum为所述当前并发数量,int为取整关键字,CpuOcRate为所述当前CPU占用率;
目标线程确定模块,用于从消息集合中获取所述当前并发数量的目标弹幕消息,并确定所述当前并发数量的目标线程;
弹幕消息分发模块,用于利用各个所述目标线程,基于弹幕消息分发机制,并行分发各个所述目标弹幕消息。
6.一种设备,其特征在于,所述设备包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-4中任一所述的多线程弹幕消息分发方法。
7.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1-4中任一所述的多线程弹幕消息分发方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811151401.1A CN109413502B (zh) | 2018-09-29 | 2018-09-29 | 多线程弹幕消息分发方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811151401.1A CN109413502B (zh) | 2018-09-29 | 2018-09-29 | 多线程弹幕消息分发方法、装置、设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109413502A CN109413502A (zh) | 2019-03-01 |
CN109413502B true CN109413502B (zh) | 2021-04-27 |
Family
ID=65465730
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811151401.1A Active CN109413502B (zh) | 2018-09-29 | 2018-09-29 | 多线程弹幕消息分发方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109413502B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110460865A (zh) * | 2019-07-23 | 2019-11-15 | 中国农业大学 | 大规模弹幕获取方法及装置 |
CN110750693A (zh) * | 2019-10-21 | 2020-02-04 | 北京百度网讯科技有限公司 | 数据处理方法、装置、设备和介质 |
CN112839011B (zh) * | 2019-11-22 | 2023-04-28 | 贵州白山云科技股份有限公司 | 缓存分发方法、装置、介质及系统 |
CN114257876A (zh) * | 2020-09-25 | 2022-03-29 | 武汉斗鱼鱼乐网络科技有限公司 | 一种弹幕显示处理方法、装置、电子设备及存储介质 |
CN112565824B (zh) * | 2020-12-03 | 2021-09-14 | 腾讯科技(深圳)有限公司 | 一种生成弹幕的方法、装置、终端及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106507133A (zh) * | 2016-11-28 | 2017-03-15 | 北京金山安全软件有限公司 | 弹幕消息的处理方法、装置、系统及其设备 |
CN107371056A (zh) * | 2017-07-18 | 2017-11-21 | 北京蜜莱坞网络科技有限公司 | 一种加载弹幕的方法和装置 |
CN107426598A (zh) * | 2017-03-02 | 2017-12-01 | 武汉斗鱼网络科技有限公司 | 一种弹幕信息处理方法及注入模块 |
CN107818023A (zh) * | 2017-11-06 | 2018-03-20 | 深圳市雷鸟信息科技有限公司 | 基于线程的消息处理方法、智能设备及存储介质 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10063509B2 (en) * | 2015-11-23 | 2018-08-28 | International Business Machines Corporation | Managing message threads through use of a consolidated message |
-
2018
- 2018-09-29 CN CN201811151401.1A patent/CN109413502B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106507133A (zh) * | 2016-11-28 | 2017-03-15 | 北京金山安全软件有限公司 | 弹幕消息的处理方法、装置、系统及其设备 |
CN107426598A (zh) * | 2017-03-02 | 2017-12-01 | 武汉斗鱼网络科技有限公司 | 一种弹幕信息处理方法及注入模块 |
CN107371056A (zh) * | 2017-07-18 | 2017-11-21 | 北京蜜莱坞网络科技有限公司 | 一种加载弹幕的方法和装置 |
CN107818023A (zh) * | 2017-11-06 | 2018-03-20 | 深圳市雷鸟信息科技有限公司 | 基于线程的消息处理方法、智能设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN109413502A (zh) | 2019-03-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109413502B (zh) | 多线程弹幕消息分发方法、装置、设备及存储介质 | |
WO2021098138A1 (zh) | 运行控制方法、装置、家电设备以及存储介质 | |
CN110633442A (zh) | 一种推送方法、装置及电子设备 | |
US20090113440A1 (en) | Multiple Queue Resource Manager | |
CN103873587A (zh) | 一种基于云平台实现调度的方法及装置 | |
CN109062650B (zh) | 弹幕消息分发方法、装置、设备及存储介质 | |
CN108810645B (zh) | 弹幕消息分发方法、装置、设备及存储介质 | |
CN109379605B (zh) | 基于弹幕顺序的弹幕分发方法、装置、设备和存储介质 | |
CN109388501B (zh) | 基于人脸识别请求的通信匹配方法、装置、设备及介质 | |
CN109413489B (zh) | 串行式的多线程弹幕分发方法、装置、设备和存储介质 | |
CN114461668A (zh) | 一种基于线程池的mysql数据库查询方法及装置 | |
CN109005465B (zh) | 弹幕消息分发方法、装置、设备及存储介质 | |
CN109246470B (zh) | 多线程同步的弹幕分发方法、装置、设备及存储介质 | |
CN109309848B (zh) | 基于重试机制的弹幕分发方法、装置、设备及存储介质 | |
WO2021073405A1 (zh) | 数据分发方法、电子设备及存储介质 | |
CN110275780B (zh) | 用于限制流量的方法和装置 | |
CN108924653B (zh) | 弹幕消息分发方法、装置、设备和存储介质 | |
CN115484167B (zh) | 通信网络中的网络切片关断方法、计算机装置及存储介质 | |
CN107911484B (zh) | 一种消息处理的方法及装置 | |
CN109032779B (zh) | 任务处理方法、装置、计算机设备及可读存储介质 | |
CN109086107B (zh) | 弹幕消息分发方法、装置、设备及存储介质 | |
CN108076020B (zh) | 一种缓存空间的管理方法及装置 | |
CN109144639B (zh) | 弹幕消息分发方法、装置、设备及存储介质 | |
CN109005448B (zh) | 弹幕消息分发方法、装置、设备及存储介质 | |
CN107809323B (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 |