一种数据处理方法、装置、存储介质及服务器与流程

文档序号:31868929发布日期:2022-10-21 17:55阅读:47来源:国知局
一种数据处理方法、装置、存储介质及服务器与流程

1.本技术涉及计算机领域,具体涉及一种数据处理方法、装置、计算机可读存储介质及服务器。


背景技术:

2.近年来,伴随计算机设备技术的发展以及普及,涌现出越来越多的大型多人在线游戏(massive multiplayer online,mmo)供用户体验,mmo对应的服务器采用多线程的架构,人工地将独立的模块或者功能分配到不同的线程上执行,比如一个线程实现游戏场景相关功能,一个线程负责收发网络数据等。这种架构使得不同的任务能够同时执行,提升了系统的吞吐量,支持大量玩家同时在线进行游戏。
3.现有技术中,除了各个子模块使用独立的线程执行外,服务端往往还需要一个主线程(main thread)负责游戏玩法逻辑相关的业务。主线程响应各个子模块的回调函数,修改玩家数据、游戏数据、响应玩家请求以及执行定时器等玩法相关的业务逻辑,而这些业务逻辑大多是采用脚本语言来编写。由于主线程只有一个,所有的脚本层函数顺序执行,因此主线程的负载往往对服务端的性能起了决定性的作用。
4.在对现有技术的研究和实践过程中,本技术的发明人发现,现有技术中由于主线程需要执行脚本层中的大量函数,导致主线程的负载较大,降低了主线程的处理效率。


技术实现要素:

5.本技术实施例提供一种数据处理方法及装置,可以降低主线程的负载,提高主线程的处理效率。
6.为解决上述技术问题,本技术实施例提供以下技术方案:
7.一种数据处理方法,包括:
8.接收操作请求,根据所述操作请求的请求类型确定出多个候选函数;
9.当检测到主线程调用多个候选函数中的目标函数时,判断所述目标函数中是否存在与其他函数相同的目标参数,所述其他函数为所述多个候选函数中除所述目标函数以外的其他函数;
10.当所述目标函数中存在与其他函数相同的目标参数时,获取所述目标参数在所述目标函数中对应的目标环境类型;
11.获取所述目标参数在其他函数中对应的其他环境类型,所述其他环境类型为所述目标参数在除所述目标函数外其他存在所述目标参数的候选函数中对应的环境类型;
12.当所述目标环境类型与所述其他环境类型不相同时,控制从线程调用所述目标函数并对所述目标函数进行处理。
13.一种数据处理装置,包括:
14.确定模块,用于接收操作请求,根据所述操作请求的请求类型确定出多个候选函数;
15.第一判断模块,用于当检测到主线程调用多个候选函数中的目标函数时,判断目标函数中是否存在与其他函数相同的目标参数,所述其他函数为所述多个候选函数中除所述目标函数以外的其他函数;
16.第一获取模块,用于当所述目标函数中存在与其他函数相同的目标参数时,获取所述目标参数在所述目标函数中对应的目标环境类型;
17.第二获取模块,用于获取所述目标参数在其他函数中对应的其他环境类型,所述其他环境类型为所述目标参数在除所述目标函数外其他存在所述目标参数的候选函数中对应的环境类型;
18.第一控制模块,用于当所述目标环境类型与所述其他环境类型不相同时,控制从线程调用所述目标函数并对所述目标函数进行处理。
19.在一些实施例中,所述第一控制模块,包括:
20.封装子模块,用于当所述目标环境类型与所述其他环境类型不相同时,将所述目标函数封装为目标任务,所述目标任务包括执行所述目标函数所需的参数以及参数之间的执行逻辑;
21.确定子模块,用于获取所述目标函数中每一参数对应的环境类型,并确定每一参数在环境类型下对应的环境值;
22.分配子模块,用于将所述目标任务分配至每一环境值对应的等待队列;
23.控制子模块,用于控制从线程从每一所述等待队列中获取所述目标任务,并按照所述目标任务中的所述执行逻辑对所述目标函数的参数进行处理。
24.在一些实施例中,所述控制子模块,包括:
25.第一确定单元,用于确定所述目标任务是否为每一环境值对应的等待队列中的首个待执行任务;
26.控制单元,用于当所述目标任务为每一环境值对应的等待队列中的首个待执行任务时,控制从线程从每一所述等待队列中获取所述目标任务,并按照所述目标任务中的所述执行逻辑对所述目标函数的参数进行处理。
27.在一些实施例中,所述从线程包括多个从线程,所述控制子模块或所述控制单元,用于:
28.判断所述多个从线程中是否存在空闲从线程;
29.若所述多个从线程中存在空闲从线程,则控制所述空闲从线程从每一所述等待队列中获取所述目标任务,并按照所述目标任务中的所述执行逻辑对所述目标函数的参数进行处理。
30.在一些实施例中,所述述控制子模块或所述控制单元,还用于:
31.若所述多个从线程中不存在空闲从线程,则获取所述多个从线程当前的负载程度;
32.将所述多个从线程当前的负载程度中负载程度最低的从线程确定为目标从线程;
33.控制所述目标从线程从每一所述等待队列中获取所述目标任务,并按照所述目标任务中的所述执行逻辑对所述目标函数的参数进行处理。
34.在一些实施例中,所述分配子模块,包括:
35.第二确定单元,用于按照预设映射关系确定每一环境值对应的等待队列;
36.分配子单元,用于将所述目标任务分配至所述等待队列中。
37.在一些实施例中,所述装置还包括:
38.第二判断模块,用于当所述目标环境类型与所述其他环境类型相同时,判断所述目标函数的函数类型以及存在所述目标参数的其他函数的函数类型中是否存在指定类型函数;
39.第二控制模块,用于若所述目标函数的函数类型以及存在所述目标参数的其他函数的函数类型中不存在指定类型函数,则控制所述从线程调用所述目标函数并对所述目标函数进行处理。
40.在一些实施例中,所述装置还包括:
41.第三控制模块,用于当所述目标函数中不存在与其他函数相同的目标参数时,控制所述从线程调用所述目标函数并对所述目标函数进行处理。
42.一种计算机可读存储介质,所述计算机可读存储介质存储有多条指令,所述指令适于处理器进行加载,以执行上述数据处理方法中的步骤。
43.一种服务器,包括存储器,处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如上所述数据处理方法中的步骤。
44.本技术实施例通过接收操作请求,根据所述操作请求的请求类型确定出多个候选函数;当检测到主线程调用多个候选函数中的目标函数时,判断目标函数中是否存在与其他函数相同的目标参数,所述其他函数为所述多个候选函数中除所述目标函数以外的其他函数;当所述目标函数中存在与其他函数相同的目标参数时,获取所述目标参数在所述目标函数中对应的目标环境类型;获取所述目标参数在其他函数中对应的其他环境类型,所述其他环境类型为所述目标参数在除所述目标函数外其他存在所述目标参数的候选函数中对应的环境类型;当所述目标环境类型与所述其他环境类型不相同时,控制从线程调用所述目标函数并对所述目标函数进行处理。以此,通过确定多个函数间是否存在相同参数,以及相同参数在每一函数中对应的环境类型,从而将不影响其他函数运行的目标函数从主线程中分离出来,并控制从线程调用目标函数,进而降低主线程的负载,提高主线程的处理效率。
附图说明
45.为了更清楚地说明本技术实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
46.图1a为本技术实施例提供的数据处理方法的场景示意图。
47.图1b为本技术实施例提供的数据处理方法的流程示意图。
48.图2为本技术实施例提供的数据处理方法的另一流程示意图。
49.图3a为本技术实施例提供的数据处理装置的结构示意图;
50.图3b为本技术实施例提供的数据处理装置的另一结构示意图;
51.图4为本技术实施例提供的服务器的结构示意图。
具体实施方式
52.下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
53.本技术实施例提供了一数据处理方法、装置及计算机可读存储介质。
54.请参阅图1a,图1a为本技术实施例所提供的数据处理系统的系统示意图,该系统可以包括至少一个客户端1000,至少一个服务器2000,至少一个数据库3000,以及网络4000。每一应用对应有至少一服务器2000,且客户端1000可以为手机、电脑或个人数字助理等终端设备,客户端1000中可以通过网络4000连接到服务器2000,或者多台服务器2000上。其中,网络4000可以是无线网络或者有线网络,比如无线网络为无线局域网(wlan)、局域网(lan)、蜂窝网络、2g网络、3g网络、4g网络、5g网络等。另外,不同的客户端1000之间也可以使用自身的蓝牙网络或者热点网络连接到服务器2000等。另外,该系统可以包括数据库3000,数据库3000可用于存储用户的用户信息或者用户在游戏中的装备信息、人物信息等。
55.本技术实施例提供了一种数据处理方法,该方法可以由服务器执行。如图1a所示,该服务器2000在接收到客户端1000通过网络4000发送的操作请求时,根据该操作请求的请求类型确定出多个候选函数;当检测到主线程调用多个候选函数中的目标函数时,判断目标函数中是否存在与其他函数相同的目标参数,该其他函数为该多个候选函数中除该目标函数以外的其他函数;当该目标函数中存在与其他函数相同的目标参数时,获取该目标参数在该目标函数中对应的目标环境类型;获取该目标参数在其他函数中对应的其他环境类型,该其他环境类型为该目标参数在除该目标函数外其他存在该目标参数的候选函数中对应的环境类型;当该目标环境类型与该其他环境类型不相同时,控制从线程调用该目标函数并对该目标函数进行处理。基于此,通过确定多个函数间是否存在相同参数,以及相同参数在每一函数中对应的环境类型,从而将不影响其他函数运行的目标函数从主线程中分离出来,并控制从线程调用目标函数,进而降低主线程的负载,提高主线程的处理效率。
56.需要说明的是,图1a所示的数据处理系统的场景示意图仅仅是一个示例,本技术实施例描述的数据处理系统以及场景是为了更加清楚的说明本技术实施例的技术方案,并不构成对于本技术实施例提供的技术方案的限定,本领域普通技术人员可知,随着数据处理系统的演变和新业务场景的出现,本技术实施例提供的技术方案对于类似的技术问题,同样适用。
57.在本实施例中,将从数据处理装置的角度进行描述,该数据处理装置具体可以集成在具备储存单元并安装有微处理器而具有运算能力的计算机设备中。
58.请参阅图1b,图1b为本技术实施例提供的数据处理方法的流程示意图。该数据处理方法包括:
59.在步骤101中,接收操作请求,根据操作请求的请求类型确定出多个候选函数。
60.其中,用户针对于客户端的操作行为可以产生多种不同类型的操作请求,例如点击客户端上显示的a控件,可产生a类型的操作请求;点击客户端上显示的b控件,可产生b类型的操作请求。操作请求由客户端发送至服务器,当服务器接收到操作请求后,会根据操作请求的请求类型确定出需要调用的多个候选函数,多个候选函数用于被计算或执行,以完
成针对操作请求的后台处理。
61.具体的,由于业务类型的不同,存在一些可在客户端上直接进行的业务,也即无需客户端与服务器进行交互,在客户端上可直接响应并处理客户发起的操作请求,并由客户端自行根据不同类型的操作请求调用存储于客户端中的函数。
62.具体的,不同类型的操作请求所需要调用的函数也是不同的,例如a类型的操作请求需要调用f1()以及f2()这两个函数,b类型的操作请求需要调用f3()以及f4()这两个函数,基于不同类型的操作请求,会对应调用不同的函数,而函数与请求类型的对应关系是开发人员在编程时已经预先设定好的。
63.在步骤102中,当检测到主线程调用多个候选函数中的目标函数时,判断目标函数中是否存在与其他函数相同的目标参数。
64.其中,主线程在调用函数时,是采用串行的方式进行调用,也即多个函数按照一定顺序依次被主线程调用,目标函数即为多个候选函数中当前需要被主程序调用的函数。检测到主线程是否即将调用多个候选函数中的目标函数的方式可通过判断已被主线程调用的函数是否被处理完成,若处理完成,则确定主线程即将调用多个候选函数中的函数,而目标函数即为多个候选函数中在主线程在调用完其他函数后,按照多个候选函数的指定调用顺序确定出当前需被首次调用的函数,并将该函数确定为目标函数。主线程是当一个程序启动时,就有一个进程被操作系统(os)创建,与此同时一个线程也立刻运行。因为它是程序开始时就执行的,如果你需要再创建线程,那么新创建的线程就是这个主线程的从线程。每个进程至少都有一个主线程。
65.具体的,其他函数为该多个候选函数中除该目标函数以外的其他函数。不同的函数中参数存在共用的情况,例如f1(a,b)函数,以及f2(a,c)函数,可以看出f1函数与f2函数共用参数a,则参数a为目标参数。
66.在步骤103中,当目标函数中存在与其他函数相同的目标参数时,获取目标参数在目标函数中对应的目标环境类型。
67.其中,在python、lisp以及lua等编程所使用的脚本语言中,多个函数虽然共用一目标参数,但目标参数也存在在编码时参数名冲突导致的多个函数共用一目标参数的情况,而在脚本语言中为了解决这种问题,采用将参数定义于不同的环境表中,也即对每个参数进行环境类型的标识,标识的内容即为环境表的名称,例如f1(a,b)函数中参数a与参数b对应的参数值存在名称为f1_env的环境表中,则参数a以及参数b对应的环境类型为f1_env,将每一参数对应的参数值存至名称为f1_env的环境表中,从而使得每个参数在不同的环境表或环境类型下对应有不同的环境值。因此当存在目标函数时,需要获取目标参数在目标函数中对应的目标环境类型。
68.具体的,每一函数中参数对应的环境类型可通过函数处理模块获取,函数处理模块的内部主要逻辑为:将代码中所有函数中的参数替换为envn.x,envn是参数x所在的环境表,因此可通过函数处理模块获取到目标参数在目标函数中对应的目标环境类型。
69.例如,
70.x=1
71.z=2
72.def foo1(x,y):
73.return x+y+z
74.通过函数处理模块获取foo1函数中每一参数对应的环境类型,已将上述代码编译为,
75.global.x=1;
76.global.z=2;
77.def foo(foo1_env.x,foo1_env.y);
78.return foo1_env.x+foo1_env.y+global.z
79.由此,位于foo1函数中的参数x以及参数y属于foo1_env环境表,也即而位于foo1函数外的参数x以及参数z属于本地变量,其环境类型为global。不同的环境表具有包含关系。例如global和foo1_env,由于foo函数定义于global中,因此foo的环境表foo1_env包含于global中;因此函数处理模块首先在foo1_env中寻找参数x以及参数z,如果找到,则使用之;否则,就往包含foo1_env的上一层即global中继续寻找,例如变量z,在foo1_env中不存在,于是继续往上在global中寻找,找到global.z,于是z便使用此环境值;如果在上一层找不到,则按照此逐层寻找的方式继续往上层寻找。
80.在步骤104中,获取目标参数在其他函数中对应的其他环境类型。
81.其中,为了确定目标函数以及其他函数中目标参数对应的环境类型是否相同,因此在步骤103之后,还需通过函数处理模块获取目标参数在其他函数中对应的其他环境类型,其他环境类型为该目标参数在除该目标函数外其他存在该目标参数的候选函数中对应的环境类型。
82.在步骤105中,当目标环境类型与其他环境类型不相同时,控制从线程调用目标函数并对目标函数进行处理。
83.其中,通过比对目标环境类型与其他环境类型,从而确定当目标环境类型与其他环境类型不同时,证明存在目标参数的函数仅是针对于目标参数的命名相同,但实质上访问的参数并不是同一个,因此可将目标函数从主线程中分离出来,并控制从线程调用该目标函数,并对目标函数进行处理。
84.在一些实施方式中,该当该目标环境类型与该其他环境类型不相同时,控制从线程调用该目标函数并对该目标函数进行处理的步骤,包括:
85.(1)当该目标环境类型与该其他环境类型不相同时,将该目标函数封装为目标任务,该目标任务包括执行该目标函数所需的参数以及参数之间的执行逻辑;
86.(2)获取该目标函数中每一参数对应的环境类型,并确定每一参数在环境类型下对应的环境值;
87.(3)将该目标任务分配至每一环境值对应的等待队列;
88.(4)控制从线程从每一该等待队列中获取该目标任务,并按照该目标任务中的该执行逻辑对该目标函数的参数进行处理。
89.其中,将目标函数从主线程中分离出来的方式为:将目标函数封装为目标任务,目标任务中包含目标函数的参数间执行逻辑,以及执行该执行逻辑所需的参数。通过函数处理模块获取目标函数中每一参数对应的环境类型,并确定每一参数在环境类型下对应的环境值。并且由于在调用函数时,函数并不是直接执行,而是根据函数中每一参数在各自环境类型下对应的环境值进入到等待队列中,因此将目标任务分别分配至每一环境值对应的等
待队列,从而控制从线程从每一该等待队列中获取该目标任务,并按照该目标任务中的该执行逻辑对该目标函数的参数进行处理。
90.例如,对foo(x,y)函数进行封装,从而得到任务foo,经函数处理模块处理后,得到参数x对应的环境类型为foo_env,参数y对应的环境类型同样为foo_env,则参数x在foo_env类型下对应的参数值为foo_env.x,参数y在foo_env类型下对应的参数值为foo_env.y。将任务foo分配至foo_env.x以及foo_env.y对应的等待队列中,并控制从线程在foo_env.x以及foo_env.y对应的等待队列中获取任务foo,并根据任务foo中foo(x,y)的参数以及执行逻辑进行计算。
91.在一些实施方式中,该控制从线程从该等待队列中获取该目标任务,并按照该目标任务中的该执行逻辑对该目标函数的参数进行处理的步骤,包括:
92.(1.1)确定该目标任务是否为每一环境值对应的等待队列中的首个待执行任务;
93.(1.2)当该目标任务为每一环境值对应的等待队列中的首个待执行任务时,控制从线程从每一该等待队列中获取该目标任务,并按照该目标任务中的该执行逻辑对该目标函数的参数进行处理。
94.其中,由于在调用函数时,必须能同时从等待队列中找到每一参数,从而才能根据找到的参数进行计算并输出结果,因此在从线程调用目标函数时,需要确定目标任务是否位于每一环境值对应的等待队列中的首个待执行任务。若是,则控制从线程将每一等待队列中取出目标任务,进而按照该目标任务中的该执行逻辑对该目标函数的参数进行处理。
95.在一些实施方式中,该从线程包括多个从线程,该控制从线程从每一该等待队列中获取该目标任务,并按照该目标任务中的该执行逻辑对该目标函数的参数进行处理的步骤,包括:
96.(1.1)判断该多个从线程中是否存在空闲从线程;
97.(1.2)若该多个从线程中存在空闲从线程,则控制该空闲从线程从每一该等待队列中获取该目标任务,并按照该目标任务中的该执行逻辑对该目标函数的参数进行处理。
98.其中,为确保用户在进行操作请求后,可以尽快得到服务器的反馈,因此需控制从主线程上分离出的目标函数可以被从线程尽快调用。而控制从线程尽快调用目标函数的方式可以为:在多个从线程中确定是否存在状态为空闲状态的从线程,若多个从线程中存在空闲状态的从线程,则可控制空闲从线程调用目标函数,也即控制空闲从线程从每一等待队列中获取目标任务,并按照该目标任务中的该执行逻辑对该目标函数的参数进行处理。
99.具体的,空闲从线程即从线程上不存在其他任务的线程,也即将任务分配至空闲从线程后,空闲从线程可以立即处理该任务。
100.在一些实施方式中,该方法还包括:
101.(1.1)若该多个从线程中不存在空闲从线程,则获取该多个从线程当前的负载程度;
102.(1.2)将该多个从线程当前的负载程度中负载程度最低的从线程确定为目标从线程;
103.(1.3)控制该目标从线程从每一该等待队列中获取该目标任务,并按照该目标任务中的该执行逻辑对该目标函数的参数进行处理。
104.其中,若多个从线程中不存在空闲从线程,则确定每一从线程的当前负载程度,并
从多个从线程中确定出负载程度最低的目标从线程,负载程度最低说明目标从线程可以尽快处理完成其他任务,从而具备处理目标任务的能力。进而控制该目标从线程从每一该等待队列中获取该目标任务,并按照该目标任务中的该执行逻辑对该目标函数的参数进行处理。
105.具体的,可对负载程度实现划分等级,具体划分出繁忙、适中以及空闲等多个负载等级,可按照每一从线程当前的在执行任务确定每一从线程的负载等级,并将负载等级最低的从线程确定为目标从线程。具体的,当不存在空闲从线程时,可将适中状态的从线程确定为目标从线程。
106.在一些实施方式中,该将该目标任务分配至每一环境值对应的等待队列的步骤,包括:
107.(1.1)按照预设映射关系确定每一环境值对应的等待队列;
108.(1.2)将该目标任务分配至该等待队列中。
109.其中,每一环境值对应有一等待队列,环境值与等待队列的映射关系可通过事先设定的方式确定。也可以在运行过程中,在第一次访问到某个环境值时动态生成,此处不做限定。
110.在一些实施方式中,该方法还包括:
111.(1)当该目标环境类型与该其他环境类型相同时,确定该目标函数的函数类型以及存在该目标参数的其他函数的函数类型中是否存在指定类型函数;
112.(2)若该目标函数的函数类型以及存在该目标参数的其他函数的函数类型中不存在指定类型函数,则控制该从线程调用该目标函数并对该目标函数进行处理。
113.其中,两个或多个函数共用同一参数,则证明这些函数之间存在关联,例如相互依赖的关系,则存在共同的目标参数的函数是不可以从主线程中分离出来的,如果分离出并分配给从线程进行调用,则会造成参数值混乱的问题。然而针对于一些不存在有指定函数类型的函数,即便多个函数访问的参数以及参数对应的环境类型相同,同样是可以从主线程上分离函数的。而针对于指定函数类型,是无法将函数从主线程中分离的。指定函数类型是调用目标函数以及其他存在目标参数的其他函数时,调用顺序的改变会导致目标参数对应的参数值改变。
114.例如,
115.x=1
116.z=2
117.def foo1(x,y):
118.return x+y+z
119.def foo2(x,y):
120.z=z+1
121.return x+y+z
122.具体的,foo1函数与foo2函数存在相同参数z,若令x为1,y为2,先调用foo1函数后调用foo2函数,则foo1函数返回的数值为1+2+2=5,foo2函数返回的数值为1+2+3=6;若先调用foo2函数后调用foo1函数,则foo2函数返回的数值为1+2+3=6,foo1函数返回的数值为1+2+3=6。由于赋值类型的函数z=z+1,导致调用顺序的不同所计算的结果也不同,因此
当存在赋值类型的函数时,不能将函数从主线程上分离。而当目标函数以及其他存在目标参数的其他函数中不存在指定类型函数时,可控制从线程调用该目标函数并对该目标函数进行处理。
123.在一些实施方式中,该方法还包括:
124.(1)当该目标函数中不存在与其他函数相同的目标参数时,控制该从线程调用该目标函数并对该目标函数进行处理。
125.其中,当目标函数中不存在与其他函数相同的目标参数时,说明目标函数中的每一参数均未被其他函数访问,故可以直接从主线程上将目标函数分离出来,并控制从线程调用目标函数并对目标函数进行处理。
126.由上述可知,本技术实施例通过接收操作请求,根据该操作请求的请求类型确定出多个候选函数;当检测到主线程调用多个候选函数中的目标函数时,判断目标函数中是否存在与其他函数相同的目标参数,该其他函数为该多个候选函数中除该目标函数以外的其他函数;当该目标函数中存在与其他函数相同的目标参数时,获取该目标参数在该目标函数中对应的目标环境类型;获取该目标参数在其他函数中对应的其他环境类型,该其他环境类型为该目标参数在除该目标函数外其他存在该目标参数的候选函数中对应的环境类型;当该目标环境类型与该其他环境类型不相同时,控制从线程调用该目标函数并对该目标函数进行处理。以此,通过确定多个函数间是否存在相同参数,以及相同参数在每一函数中对应的环境类型,从而将不影响其他函数运行的目标函数从主线程中分离出来,并控制从线程调用目标函数,进而降低主线程的负载,提高主线程的处理效率。
127.结合上述实施例所描述的方法,以下将举例作进一步详细说明。
128.请参阅图2,图2为本技术实施例提供的数据处理方法的另一流程示意图。该方法流程可以包括:
129.在步骤201中,服务器接收操作请求,根据操作请求的请求类型确定出多个候选函数。
130.其中,用户针对于客户端的操作行为可以产生多种不同类型的操作请求,例如点击客户端上显示的a控件,可产生a类型的操作请求;点击客户端上显示的b控件,可产生b类型的操作请求。操作请求由客户端发送至服务器,当服务器接受到操作请求后,会根据操作请求的请求类型确定出需要调用的多个候选函数,多个候选函数用于被计算或执行,以完成针对操作请求的后台处理。
131.具体的,不同类型的操作请求所需要调用的函数也是不同的,例如a类型的操作请求需要调用f1()以及f2()这两个函数,b类型的操作请求需要调用f3()以及f4()这两个函数,基于不同类型的操作请求,会对应调用不同的函数,而函数与请求类型的对应关系是开发人员在编程时已经预先设定好的。
132.在步骤202中,当服务器检测到主线程调用多个候选函数中的目标函数时,判断目标函数中是否存在与其他函数相同的目标参数。
133.函数中是否存在与其他函数相同的目标参数。
134.其中,主线程在调用函数时,是采用串行的方式进行调用,也即多个函数按照一定顺序依次被主线程调用,目标函数即为多个候选函数中当前需要被主程序调用的函数。检测到主线程是否即将调用多个候选函数中的目标函数的方式可通过判断已被主线程调用
的函数是否被处理完成,若处理完成,则确定主线程即将调用多个候选函数中的目标函数。主线程是当一个程序启动时,就有一个进程被操作系统(os)创建,与此同时一个线程也立刻运行。因为它是程序开始时就执行的,如果你需要再创建线程,那么新创建的线程就是这个主线程的从线程。每个进程至少都有一个主线程。
135.具体的,其他函数为该多个候选函数中除该目标函数以外的其他函数。不同的函数中参数存在共用的情况,例如f1(a,b)函数,以及f2(a,c)函数,可以看出f1函数与f2函数共用参数a,则参数a为目标参数。
136.在步骤203中,当目标函数中存在与其他函数相同的目标参数时,服务器获取目标参数在目标函数中对应的目标环境类型。
137.其中,在python、lisp以及lua等编程所使用的脚本语言中,多个函数虽然共用一目标参数,但目标参数也存在是在编码时参数名冲突导致的,而在脚本语言中为了解决这种问题,采用将参数定义于不同的环境表中,也即对每个参数进行环境类型的标识,从而使得每个参数在不同的环境表或环境类型下对应有不同的环境值。标识的内容即为环境表的名称,例如f1(a,b)函数中参数a与参数b对应的参数值存在名称为f1_env的环境表中,则参数a以及参数b对应的环境类型为f1_env,将每一参数对应的参数值存至名称为f1_env的环境表中,因此当存在目标函数时,需要获取目标参数在目标函数中对应的目标环境类型。
138.具体的,每一函数中参数对应的环境类型可通过函数处理模块获取,函数处理模块的内部主要逻辑为:将代码中所有函数中的参数替换为envn.x,envn是参数x所在的环境表,因此可通过函数处理模块获取到目标参数在目标函数中对应的目标环境类型。
139.在步骤204中,服务器获取目标参数在其他函数中对应的其他环境类型。
140.其中,为了确定目标函数以及其他函数中目标参数对应的环境类型是否相同,因此在步骤203之后,还需通过函数处理模块获取目标参数在其他函数中对应的其他环境类型,其他环境类型为该目标参数在除该目标函数外其他存在该目标参数的候选函数中对应的环境类型。
141.在步骤205中,当目标环境类型与其他环境类型不相同时,服务器将目标函数封装为目标任务。
142.其中,将目标函数从主线程中分离出来的方式为:将目标函数封装为目标任务,目标任务中包含目标函数的参数间执行逻辑,以及执行该执行逻辑所需的参数。
143.例如,对foo(x,y)函数进行封装,从而得到任务foo。
144.在步骤206中,服务器获取目标函数中每一参数对应的环境类型,并确定每一参数在环境类型下对应的环境值。
145.例如,foo(x,y)函数经函数处理模块处理后,得到参数x对应的环境类型为foo_env,参数y对应的环境类型同样为foo_env,则参数x在foo_env类型下对应的参数值为foo_env.x,参数y在foo_env类型下对应的参数值为foo_env.y。
146.在步骤207中,服务器按照预设映射关系确定每一环境值对应的等待队列。
147.其中,其中,每一环境值对应有一等待队列,环境值与等待队列的映射关系可通过事先设定的方式确定。也可以在运行过程中,在第一次访问到某个环境值时动态生成,此处不做限定。
148.在步骤208中,服务器将目标任务分配至等待队列中。
149.其中,由于在调用函数时,函数并不是直接执行,而是根据函数中每一参数在各自环境类型下对应的环境值进入到等待队列中,因此将目标任务分别分配至每一环境值对应的等待队列。
150.例如,将任务foo分配至foo_env.x以及foo_env.y对应的等待队列中。
151.在步骤209中,服务器确定目标任务是否为每一环境值对应的等待队列中的首个待执行任务。
152.其中,由于在调用函数时,必须能同时从等待队列中找到每一参数,从而才能根据找到的参数进行计算并输出结果,因此在从线程调用目标函数时,需要确定目标任务是否位于每一环境值对应的等待队列中的首个待执行任务。
153.在步骤210中,当目标任务为每一环境值对应的等待队列中的首个待执行任务时,服务器判断多个从线程中是否存在空闲从线程。
154.其中,若目标任务位于每一环境值对应的等待队列中的首个待执行任务,则控制从线程将每一等待队列中取出目标任务,进而按照该目标任务中的该执行逻辑对该目标函数的参数进行处理。
155.具体的,为确保用户在进行操作请求后,可以尽快得到服务器的反馈,因此需控制从主线程上分离出的目标函数可以被从线程尽快调用。
156.在步骤211中,若多个从线程中存在空闲从线程,则服务器控制空闲从线程从每一等待队列中获取目标任务,并按照目标任务中的执行逻辑对目标函数的参数进行处理。
157.其中,控制从线程尽快调用目标函数的方式可以为:在多个从线程中确定是否存在状态为空闲状态的从线程,若多个从线程中存在空闲状态的从线程,则可控制空闲从线程调用目标函数,也即控制空闲从线程从每一等待队列中获取目标任务,并按照该目标任务中的该执行逻辑对该目标函数的参数进行处理。
158.在步骤212中,若多个从线程中不存在空闲从线程,则服务器获取多个从线程当前的负载程度。
159.其中,若多个从线程中不存在空闲从线程,则可以获取多个从线程当前的负载程度。
160.具体的,可对负载程度实现划分等级,具体划分出繁忙、适中等多个负载等级,可按照每一从线程当前的在执行任务确定每一从线程的负载等级。
161.在步骤213中,服务器将多个从线程当前的负载程度中负载程度最低的从线程确定为目标从线程。
162.其中,负载程度最低说明目标从线程可以尽快处理完成其他任务,从而处理目标任务。可按照每一从线程当前的在执行任务确定每一从线程的负载等级,并将负载等级最低的从线程确定为目标从线程。
163.在步骤214中,服务器控制目标从线程从每一等待队列中获取目标任务,并按照目标任务中的执行逻辑对目标函数的参数进行处理。
164.其中,当将负载程度最低的从线程确定为目标从线程时,控制目标从线程从每一等待队列中获取目标任务,并按照目标任务中的执行逻辑对目标函数的参数进行处理。
165.由上述可知,本技术实施例通过接收操作请求,根据该操作请求的请求类型确定出多个候选函数;当检测到主线程调用多个候选函数中的目标函数时,判断目标函数中是
否存在与其他函数相同的目标参数,该其他函数为该多个候选函数中除该目标函数以外的其他函数;当该目标函数中存在与其他函数相同的目标参数时,获取该目标参数在该目标函数中对应的目标环境类型;获取该目标参数在其他函数中对应的其他环境类型,该其他环境类型为该目标参数在除该目标函数外其他存在该目标参数的候选函数中对应的环境类型;当该目标环境类型与该其他环境类型不相同时,控制从线程调用该目标函数并对该目标函数进行处理。以此,通过确定多个函数间是否存在相同参数,以及相同参数在每一函数中对应的环境类型,从而将不影响其他函数运行的目标函数从主线程中分离出来,并控制从线程调用目标函数,进而降低主线程的负载,提高主线程的处理效率。
166.为便于更好的实施本技术实施例提供的数据处理方法,本技术实施例还提供一种基于上述数据处理方法的装置。其中名词的含义与上述数据处理方法中相同,具体实现细节可以参考方法实施例中的说明。
167.请参阅图3a及图3b,图3a为本技术实施例提供的数据处理装置的结构示意图,图3b为本技术实施例提供的数据处理装置的另一结构示意图。其中该数据处理装置可以包括确定模块301、第一判断模块302、第一获取模块303、第二获取模块304以及第一控制模块305等。
168.确定模块301,用于接收操作请求,根据该操作请求的请求类型确定出多个候选函数;
169.第一判断模块302,用于当检测到主线程调用多个候选函数中的目标函数时,判断目标函数中是否存在与其他函数相同的目标参数,该其他函数为该多个候选函数中除该目标函数以外的其他函数;
170.第一获取模块303,用于当该目标函数中存在与其他函数相同的目标参数时,获取该目标参数在该目标函数中对应的目标环境类型;
171.第二获取模块304,用于获取该目标参数在其他函数中对应的其他环境类型,该其他环境类型为该目标参数在除该目标函数外其他存在该目标参数的候选函数中对应的环境类型;
172.第一控制模块305,用于当该目标环境类型与该其他环境类型不相同时,控制从线程调用该目标函数并对该目标函数进行处理。
173.在一些实施方式中,该第一控制模块305,包括:
174.封装子模块3051,用于当该目标环境类型与该其他环境类型不相同时,将该目标函数封装为目标任务,该目标任务包括执行该目标函数所需的参数以及参数之间的执行逻辑;
175.确定子模块3052,用于获取该目标函数中每一参数对应的环境类型,并确定每一参数在环境类型下对应的环境值;
176.分配子模块3053,用于将该目标任务分配至每一环境值对应的等待队列;
177.控制子模块3054,用于控制从线程从每一该等待队列中获取该目标任务,并按照该目标任务中的该执行逻辑对该目标函数的参数进行处理。
178.在一些实施方式中,该控制子模块3054,包括:
179.第一确定单元,用于确定该目标任务是否为每一环境值对应的等待队列中的首个待执行任务;
180.控制单元,用于当该目标任务为每一环境值对应的等待队列中的首个待执行任务时,控制从线程从每一该等待队列中获取该目标任务,并按照该目标任务中的该执行逻辑对该目标函数的参数进行处理。
181.在一些实施方式中,该从线程包括多个从线程,该控制子模块3054或该控制单元,用于:
182.判断该多个从线程中是否存在空闲从线程;
183.若该多个从线程中存在空闲从线程,则控制该空闲从线程从每一该等待队列中获取该目标任务,并按照该目标任务中的该执行逻辑对该目标函数的参数进行处理。
184.在一些实施方式中,该控制子模块3054或该控制单元还用于:
185.若该多个从线程中不存在空闲从线程,则获取该多个从线程当前的负载程度;
186.将该多个从线程当前的负载程度中负载程度最低的从线程确定为目标从线程;
187.控制该目标从线程从每一该等待队列中获取该目标任务,并按照该目标任务中的该执行逻辑对该目标函数的参数进行处理。
188.在一些实施方式中,该分配子模块3053,包括:
189.第二确定单元,用于按照预设映射关系确定每一环境值对应的等待队列;
190.分配子单元,用于将该目标任务分配至该等待队列中。
191.在一些实施方式中,该装置还包括:
192.第二判断模块306,用于当该目标环境类型与该其他环境类型相同时,判断该目标函数的函数类型以及存在该目标参数的其他函数的函数类型中是否存在指定类型函数;
193.第二控制模块307,用于若该目标函数的函数类型以及存在该目标参数的其他函数的函数类型中不存在指定类型函数,则控制该从线程调用该目标函数并对该目标函数进行处理。
194.在一些实施方式中,该装置还包括:
195.第三控制模块308,用于当该目标函数中不存在与其他函数相同的目标参数时,控制该从线程调用该目标函数并对该目标函数进行处理。
196.由上述可知,本技术实施例通过第一确定模块301接收操作请求,根据该操作请求的请求类型确定出多个候选函数;判断模块302当检测到主线程调用多个候选函数中的目标函数时,判断目标函数中是否存在与其他函数相同的目标参数,该其他函数为该多个候选函数中除该目标函数以外的其他函数;第一获取模块303当该目标函数中存在与其他函数相同的目标参数时,获取该目标参数在该目标函数中对应的目标环境类型;第二获取模块304获取该目标参数在其他函数中对应的其他环境类型,该其他环境类型为该目标参数在除该目标函数外其他存在该目标参数的候选函数中对应的环境类型;第一控制模块305当该目标环境类型与该其他环境类型不相同时,控制从线程调用该目标函数并对该目标函数进行处理。以此,通过确定多个函数间是否存在相同参数,以及相同参数在每一函数中对应的环境类型,从而将不影响其他函数运行的目标函数从主线程中分离出来,并控制从线程调用目标函数,进而降低主线程的负载,提高主线程的处理效率。
197.以上各个操作的具体实施可参见前面的实施例,在此不再赘述。
198.相应的,本技术实施例还提供一种服务器,如图4所示,图4为本技术实施例提供的服务器的结构示意图。该服务器2000包括有一个或者一个以上处理核心的处理器401、有一
个或一个以上计算机可读存储介质的存储器402及存储在存储器402上并可在处理器上运行的计算机程序。其中,处理器401与存储器402电性连接。本领域技术人员可以理解,图中示出的服务器结构并不构成对服务器的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
199.处理器401是服务器2000的控制中心,利用各种接口和线路连接整个服务器2000的各个部分,通过运行或加载存储在存储器402内的软件程序和/或模块,以及调用存储在存储器402内的数据,执行服务器2000的各种功能和处理数据,从而对服务器2000进行整体监控。
200.在本技术实施例中,服务器2000中的处理器401会按照如下的步骤,将一个或一个以上的应用程序的进程对应的指令加载到存储器402中,并由处理器401来运行存储在存储器402中的应用程序,从而实现各种功能:
201.接收操作请求,根据所述操作请求的请求类型确定出多个候选函数;当检测到主线程调用多个候选函数中的目标函数时,判断目标函数中是否存在与其他函数相同的目标参数,所述其他函数为所述多个候选函数中除所述目标函数以外的其他函数;当所述目标函数中存在与其他函数相同的目标参数时,获取所述目标参数在所述目标函数中对应的目标环境类型;获取所述目标参数在其他函数中对应的其他环境类型,所述其他环境类型为所述目标参数在除所述目标函数外其他存在所述目标参数的候选函数中对应的环境类型;当所述目标环境类型与所述其他环境类型不相同时,控制从线程调用所述目标函数并对所述目标函数进行处理。
202.以上各个操作的具体实施可参见前面的实施例,在此不再赘述。
203.可选的,如图4所示,服务器2000还包括:输入单元403以及电源404。其中,处理器401分别与输入单元403以及电源404电性连接。本领域技术人员可以理解,图4中示出的服务器结构并不构成对服务器的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
204.输入单元403可用于接收输入的数字、字符信息或用户特征信息(例如指纹、虹膜、面部信息等),以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。
205.电源404用于给服务器2000的各个部件供电。可选的,电源404可以通过电源管理系统与处理器401逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。电源404还可以包括一个或一个以上的直流或交流电源、再充电系统、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。
206.尽管图4中未示出,服务器2000还可以包括摄像头、传感器、无线保真模块、蓝牙模块等,在此不再赘述。
207.在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
208.由上可知,本实施例提供的服务器可以接收操作请求,根据该操作请求的请求类型确定出多个候选函数;当检测到主线程调用多个候选函数中的目标函数时,判断目标函数中是否存在与其他函数相同的目标参数,该其他函数为该多个候选函数中除该目标函数以外的其他函数;当该目标函数中存在与其他函数相同的目标参数时,获取该目标参数在
该目标函数中对应的目标环境类型;获取该目标参数在其他函数中对应的其他环境类型,该其他环境类型为该目标参数在除该目标函数外其他存在该目标参数的候选函数中对应的环境类型;当该目标环境类型与该其他环境类型不相同时,控制从线程调用该目标函数并对该目标函数进行处理。以此,通过确定多个函数间是否存在相同参数,以及相同参数在每一函数中对应的环境类型,从而将不影响其他函数运行的目标函数从主线程中分离出来,并控制从线程调用目标函数,进而降低主线程的负载,提高主线程的处理效率。
209.本领域普通技术人员可以理解,上述实施例的各种方法中的全部或部分步骤可以通过指令来完成,或通过指令控制相关的硬件来完成,该指令可以存储于一计算机可读存储介质中,并由处理器进行加载和执行。
210.为此,本技术实施例提供一种计算机可读存储介质,其中存储有多条计算机程序,该计算机程序能够被处理器进行加载,以执行本技术实施例所提供的任一种数据处理方法中的步骤。例如,该计算机程序可以执行如下步骤:
211.接收操作请求,根据该操作请求的请求类型确定出多个候选函数;当检测到主线程调用多个候选函数中的目标函数时,判断目标函数中是否存在与其他函数相同的目标参数,该其他函数为该多个候选函数中除该目标函数以外的其他函数;当该目标函数中存在与其他函数相同的目标参数时,获取该目标参数在该目标函数中对应的目标环境类型;获取该目标参数在其他函数中对应的其他环境类型,该其他环境类型为该目标参数在除该目标函数外其他存在该目标参数的候选函数中对应的环境类型;当该目标环境类型与该其他环境类型不相同时,控制从线程调用该目标函数并对该目标函数进行处理。
212.以上各个操作的具体实施可参见前面的实施例,在此不再赘述。
213.其中,该存储介质可以包括:只读存储器(rom,read only memory)、随机存取记忆体(ram,random access memory)、磁盘或光盘等。
214.由于该存储介质中所存储的计算机程序,可以执行本技术实施例所提供的任一种数据处理方法中的步骤,因此,可以实现本技术实施例所提供的任一种数据处理方法所能实现的有益效果,详见前面的实施例,在此不再赘述。
215.以上对本技术实施例所提供的一种数据处理方法、装置、计算机可读存储介质及服务器进行了详细介绍,本文中应用了具体个例对本技术的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本技术的方法及其核心思想;同时,对于本领域的技术人员,依据本技术的思想,在具体实施方式及应用范围上均会有改变之处,综上该,本说明书内容不应理解为对本技术的限制。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1