一种任务处理方法、装置、电子设备及存储介质与流程

文档序号:25543341发布日期:2021-06-18 20:40
一种任务处理方法、装置、电子设备及存储介质与流程

本发明涉及最大化利用ai硬件加速器算力领域,尤其涉及一种任务处理方法、装置、电子设备及存储介质。



背景技术:

在ai硬件加速器(包括gpu和ai专用芯片)上执行的一系列任务通常会先放到一个或多个队列中,当ai硬件加速器资源空闲时,再从队列中取出任务并执行。通常任务放置到队列的顺序是由用户代码决定的。如图1所示,图1为现有技术中总任务执行时间的示意图,现有的技术中,ai硬件加速器直接对计算队列中的任务依次调度,启动一个进程逐个顺序处理的方式缺点是耗时较长、无法优先处理高优先级任务。多线程处理形式的线程池技术的缺点是线程总数是一定的,因而缺乏灵活性,具体是线程池中指定的线程总数较少时,仍存在耗时较长等问题,指定的总数较多时,由于多数线程处于不工作状态,导致cpu利用率很低,因此队列中任务的顺序和每个任务的执行时间会影响硬件计算资源的利用率,这便导致一些用户的代码无法实现最佳并发,使计算资源闲置,增加了总任务的运行时间。



技术实现要素:

为了解决上述问题,本发明提供一种任务处理方法,所述方法包括:

根据原始任务队列中各个任务之间的依赖关系,利用任务执行仿真器对所述原始任务队列中的任务进行仿真执行,计算出各个任务的估算执行时间;

根据各个任务的估算执行时间,将所述原始任务队列中各个任务的排序进行调整,获得调整任务队列;

基于所述调整任务队列中各个任务之间的依赖关系,依次执行相应的任务。

进一步地、所述根据各个任务的估算执行时间,将所述原始任务队列中各个任务的排序进行调整,包括:

根据所述原始任务队列中各个任务之间的依赖关系,将所述原始任务队列中存在顺序执行关系的任务拆分成一列,获得多个拆分任务队列,其中,不同拆分任务队列中的任务可并行执行;

根据所述多个拆分任务队列中各个任务的估算执行时间,绘制时间任务图,所述时间任务图中包括各个任务的开始执行时间点;

将所述时间任务图中各个任务的开始估算执行时间点的先后排序作为各个任务新的排序,获得所述调整任务队列。

进一步地、所述根据所述多个拆分任务队列中各个任务的估算执行时间,绘制时间任务图,包括:

根据各个任务的估算执行时间,依次将每个拆分任务队列的各个任务的开始执行时间点标记在时间轴上,绘制出所述时间任务图;其中,每个拆分队列中第一个任务的开始执行的时间点相同,为所述时间任务图的起始点。

进一步地、所述将所述时间任务图中各个任务的开始估算执行时间点的先后排序作为各个任务新的排序,包括:

若所述时间任务图中目标开始估算执行时间点对应有多个任务,则将所述目标开始估算执行时间点对应的多个任务进行随机排序,获得所述目标开始估算执行时间点对应的多个任务的新的排序。

另一方面,本发明提供一种任务处理装置,包括:

执行时间确定模块,被配置为执行根据原始任务队列中各个任务之间的依赖关系,利用任务执行仿真器对所述原始任务队列中的任务进行仿真执行,计算出各个任务的估算执行时间;

任务队列调整模块,被配置为执行根据各个任务的估算执行时间,将所述原始任务队列中各个任务的排序进行调整,获得调整任务队列;

执行模块,被配置为执行基于所述调整任务队列中各个任务之间的依赖关系,依次执行相应的任务。

进一步地、所述任务队列调整模块,包括:

任务队列拆分单元,被配置为执行根据所述原始任务队列中各个任务之间的依赖关系,将所述原始任务队列中存在顺序执行关系的任务拆分成一列,获得多个拆分任务队列,其中,不同拆分任务队列中的任务可并行执行;

时间任务图绘制单元,被配置为执行根据所述多个拆分任务队列中各个任务的估算执行时间,绘制时间任务图,所述时间任务图中包括各个任务的开始执行时间点;

任务队列调整单元,被配置为执行将所述时间任务图中各个任务的开始估算执行时间点的先后排序作为各个任务新的排序,获得所述调整任务队列。

进一步地、所述时间任务图绘制单元,包括:

时间任务图绘制子单元,被配置为执行根据各个任务的估算执行时间,依次将每个拆分任务队列的各个任务的开始执行时间点标记在时间轴上,绘制出所述时间任务图;其中,每个拆分队列中第一个任务的开始执行的时间点相同,为所述时间任务图的起始点。

进一步地、所述任务队列调整单元,包括:

任务队列调整单元子单元,被配置为执行若所述时间任务图中目标开始估算执行时间点对应有多个任务,则将所述目标开始估算执行时间点对应的多个任务进行随机排序,获得所述目标开始估算执行时间点对应的多个任务的新的排序。

另一方面,本发明提供一种电子设备,所述电子设备包括处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现如上述任一项所述的任务处理方法。

再一方面,本发明提供一种计算机可读存储介质,所述存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由处理器加载并执行以实现如上述任一项所述的任务处理方法。

由于上述技术方案,本发明具有以下有益效果:

本发明提出了一种任务处理方法、装置、电子设备及存储介质,基于任务的依赖关系和执行时间对原始任务队列中的任务重新排序得到调整任务队列,进而根据调整任务队列依次执行相应的任务,并且用户编写代码过程中无需考虑任务下发的顺序问题,在执行前可以通过执行优化器对计算队列中的任务自动排序,能够实现最佳并发。大大提高了计算资源的使用效率,减少了总任务的执行时间。

附图说明

为了更清楚地说明本发明的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单的介绍。显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它附图。

图1为现有技术中总任务执行时间的示意图;

图2是本发明实施例提供的一种任务处理方法的流程图;

图3为本发明实施例提供的另一种任务处理方法的流程图;

图4为本发明实施例提供的再一种任务处理方法的流程图;

图5为本发明实施例提供的又一种任务处理方法的流程图;

图6为本发明中总任务执行时间的示意图:

图7是本发明实施例提供的一种任务处理装置的框图;

图8是本发明实施例提供的一种电子设备的结构示意图;

图9是本发明实施例提供的一种存储介质的结构示意图;

其中,510-执行时间确定模块,520-任务队列调整模块,530-执行模块,5201-任务队列拆分单元,5202-时间任务图绘制单元,5203-任务队列调整单元。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。

需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、装置、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。

本申请实施例中,本申请提出的任务处理方法的执行主体可以是服务器或客户端,其中,服务器可以包括独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、cdn(contentdeliverynetwork,内容分发网络)、以及大数据和人工智能平台等基础云计算服务的云服务器。

本申请实施例中,所述客户端可以包括智能手机、台式计算机、平板电脑、笔记本电脑、智能音箱、数字助理、增强现实(augmentedreality,ar)/虚拟现实(virtualreality,vr)设备、智能可穿戴设备等类型的实体设备。本申请实施例中客户端上运行的操作系统可以包括但不限于安卓系统、ios系统、linux、windows等。

需要说明的是,以下图中示出的是一种可能的步骤顺序,实际上并不限定必须严格按照此顺序。有些步骤可以在互不依赖的情况下并行执行。

以下介绍本发明的一种任务处理方法,请参考说明书附图2,图2是本发明实施例提供的一种任务处理方法的流程图,该方法的执行主体可以是上述服务器或客户端,所述方法可以包括:

s102、根据原始任务队列中各个任务之间的依赖关系,利用任务执行仿真器对所述原始任务队列中的任务进行仿真执行,计算出各个任务的估算执行时间。

在具体的实施过程中,原始任务队列可以是存放的待处理任务的队列,原始任务队列中有多个不同的任务,每个任务可以是由软件完成的一个活动。每个任务既可以是一个进程,也可以是一个线程。例如,读取数据并将数据放入内存中。这个任务可以作为一个进程来实现,也可以作为一个线程(或作为一个中断任务)来实现。

可以理解的是,不同的任务之间会存在对应的依赖关系,即具有依赖关系的任务可以是某一进程中一路单独运行的程序任务。也就是说,各个具有依赖关系的任务共享相同的代码和全局数据,但各有其自己的堆栈。由于所有具有依赖关系的任务共享同样的代码和全局数据。

具体的,原始任务队列的顺序由用户代码中任务下发的顺序决定,该原始任务队列中可以有多个任务,用户可以指定任务顺序执行,也可以设置任务并发执行。由于计算量和硬件执行时间成正比关系,可以通过对任务计算量的评估来预测任务在ai硬件加速器上的执行时间,因此,可以利用预先配置的任务执行仿真器计算出原始任务队列中每个任务的估算执行时间。

可以理解的是,每个任务均携带有用户代码,具有相同的用户代码的不同任务可以表征其具有依赖关系和任务执行的顺序,即可以根据用户代码确定出不同任务的依赖关系和多个具有依赖关系的任务的执行顺序。

s104、根据各个任务的估算执行时间,将所述原始任务队列中各个任务的排序进行调整,获得调整任务队列。

在一些可能的实施例中,图3为本发明实施例提供的另一种任务处理方法的流程图,如图3所示,所述根据各个任务的估算执行时间,将所述原始任务队列中各个任务的排序进行调整,包括:

s202、根据所述原始任务队列中各个任务之间的依赖关系,将所述原始任务队列中存在顺序执行关系的任务拆分成一列,获得多个拆分任务队列,其中,不同拆分任务队列中的任务可并行执行。

s204、根据所述多个拆分任务队列中各个任务的估算执行时间,绘制时间任务图,所述时间任务图中包括各个任务的开始执行时间点。

在一些可能的实施例中,所述根据所述多个拆分任务队列中各个任务的估算执行时间,绘制时间任务图,包括:

根据各个任务的估算执行时间,依次将每个拆分任务队列的各个任务的开始执行时间点标记在时间轴上,绘制出所述时间任务图;其中,每个拆分队列中第一个任务的开始执行的时间点相同,为所述时间任务图的起始点。

在具体的实施过程中,可以对拆分任务队列中各个任务进行优先级划分,即首先执行的任务为第一优先级、之后执行的任务为第二优先级,依次类推。

在绘制时间任务图时可以按照各个任务进行优先级依次选取每个拆分任务队列中各个任务和对应的执行时间,并将全部任务的开始执行时间点标记在时间轴上。

s206、将所述时间任务图中各个任务的开始估算执行时间点的先后排序作为各个任务新的排序,获得所述调整任务队列。

在一些可能的实施例中,所述将所述时间任务图中各个任务的开始估算执行时间点的先后排序作为各个任务新的排序,包括:

若所述时间任务图中目标开始估算执行时间点对应有多个任务,则将所述目标开始估算执行时间点对应的多个任务进行随机排序,获得所述目标开始估算执行时间点对应的多个任务的新的排序。

在具体的实施过程中,在时间任务图中同一时间点且同一优先级的任务在调整任务队列中的排序看按照任务的估算执行时间进行排序。即估算执行时间长的任务在估算任务执行时间短的任务前执行或同步执行。

s106、基于所述调整任务队列中各个任务之间的依赖关系,依次执行相应的任务。

在具体的实施过程中,服务器或客户端可以根据调整任务队列中的任务顺序依次调取需要执行的任务。

示例地、由于任务队列中的任务顺序直接影响后面ai硬件加速器上的任务调度即执行时间。为了提高计算资源利用率,实现最大程度的任务并发。本说明书实施例可以根据估算执行时间对原始任务队列中的任务重新排序,以获得最佳并发方案。具体流程如图4-6所示,图4为本发明实施例提供的再一种任务处理方法的流程图,图5为本发明实施例提供的又一种任务处理方法的流程图。

根据任务依赖关系对原始任务队列进行拆分,原始任务队列中最多有n个任务可以并发执行,则可以将原始任务队列拆分成n个队列。拆分后的队列中,同一个队列的任务需要顺序执行,不同队列中的任务可以并发执行。图4中,最多有两个任务可以并发执行,k1(ka1、kb1)的任务和k2(kc2、kd2)的任务可以并发执行。因此将原始任务队列拆分成两个,队列1和队列2。其中,队列1中任务ka1和kb1需要顺序执行,队列2中的任务kc2和kd2需要顺序执行。

通过拆分后的队列生成时间任务图。通过任务执行仿真器,可以获取到每个任务的执行时间。并确定了每个任务可以开始执行的时间。可以确定出首先开始执行的任务是ka1和kc2,其任务开始时间为t1。由于ka1的执行时间比kc2要长,因此在t2时刻任务kd2先开始执行,之后在t3时刻任务kb1才开始执行。得到计算队列中每个任务开始时间的先后顺序为:t1:ka1、kc2--t2:kd2--t3:kb1。

根据时间任务图确定出每个任务的执行时间和开始执行时间,最后根据每个任务的开始执行时间的先后顺序调整原始任务队列中的任务顺序,由于ka1、kc2的开始时间相同,所以有两种方案可以选择。方案1:ka1--kc2--kd2--kb1;方案2:kc2--ka1--kd2--kb1。两个方案均可实现最佳并发。任选其一作为最终输出的调整任务队列。

执行优化器输出调整后的调整任务队列后,ai硬件加速器对计算队列中任务调度的调度方案和之前保持一致。即首先判断任务之间的依赖关系,如果当前任务和下一个任务需要顺序执行,则当前任务完成以后,下一个任务才可以被调度;如果当前任务和下一个任务可以并发执行,则当前任务被调度后,下一个任务就可以被调度。

本发明提出了一种任务处理方法、装置、电子设备及存储介质,基于任务的依赖关系和执行时间对原始任务队列中的任务重新排序得到调整任务队列,进而根据调整任务队列依次执行相应的任务,并且用户编写代码过程中无需考虑任务下发的顺序问题,在执行前可以通过执行优化器对计算队列中的任务自动排序,能够实现最佳并发。大大提高了计算资源的使用效率,减少了总任务的执行时间。

另一方面,图7是本发明实施例提供的一种任务处理装置的框图,如图7所示,本发明实施例还提供一种任务处理装置,包括:

执行时间确定模块510,被配置为执行根据原始任务队列中各个任务之间的依赖关系,利用任务执行仿真器对所述原始任务队列中的任务进行仿真执行,计算出各个任务的估算执行时间;

任务队列调整模块520,被配置为执行根据各个任务的估算执行时间,将所述原始任务队列中各个任务的排序进行调整,获得调整任务队列;

执行模块530,被配置为执行基于所述调整任务队列中各个任务之间的依赖关系,依次执行相应的任务。

在上述实施例基础上,本说明书一个实施例中,所述任务队列调整模块520,包括:

任务队列拆分单元5201,被配置为执行根据所述原始任务队列中各个任务之间的依赖关系,将所述原始任务队列中存在顺序执行关系的任务拆分成一列,获得多个拆分任务队列,其中,不同拆分任务队列中的任务可并行执行;

时间任务图绘制单元5202,被配置为执行根据所述多个拆分任务队列中各个任务的估算执行时间,绘制时间任务图,所述时间任务图中包括各个任务的开始执行时间点;

任务队列调整单元5203,被配置为执行将所述时间任务图中各个任务的开始估算执行时间点的先后排序作为各个任务新的排序,获得所述调整任务队列。

在上述实施例基础上,本说明书一个实施例中,所述时间任务图绘制单元5202,包括:

时间任务图绘制子单元,被配置为执行根据各个任务的估算执行时间,依次将每个拆分任务队列的各个任务的开始执行时间点标记在时间轴上,绘制出所述时间任务图;其中,每个拆分队列中第一个任务的开始执行的时间点相同,为所述时间任务图的起始点。

在上述实施例基础上,本说明书一个实施例中,所述任务队列调整单元5203,包括:

任务队列调整单元子单元,被配置为执行若所述时间任务图中目标开始估算执行时间点对应有多个任务,则将所述目标开始估算执行时间点对应的多个任务进行随机排序,获得所述目标开始估算执行时间点对应的多个任务的新的排序。

需要说明的是,上述实施例提供的装置,在实现其功能时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的装置与方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。

本发明实施例还提供了一种电子设备,如图8所示,所述电子设备包括处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现如前述所述的任务处理方法。

在一个具体的实施例中,如图8所示,其示出了本发明实施例提供的电子设备的结构示意图。所述电子设备800可以包括一个或一个以上计算机可读存储介质的存储器810、一个或者一个以上处理核心的处理器820、输入单元830、显示单元840、射频(radiofrequency,rf)电路850、无线保真(wirelessfidelity,wifi)模块860以及电源870等部件。本领域技术人员可以理解,图8中示出的电子设备结构并不构成对电子设备800的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。其中:

所述存储器810可用于存储软件程序以及模块,所述处理器820通过运行或执行存储在所述存储器810的软件程序以及模块,以及调用存储在存储器810内的数据,从而执行各种功能应用以及数据处理。所述存储器810可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序等;存储数据区可存储根据所述电子设备的使用所创建的数据等。此外,存储器810可以包括高速随机存取存储器,还可以包括非易失性存储器,例如硬盘、内存、插接式硬盘,智能存储卡(smartmediacard,smc),安全数字(securedigital,sd)卡,闪存卡(flashcard)、至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。相应地,存储器810还可以包括存储器控制器,以提供处理器820对存储器810的访问。

所述处理器820是电子设备800的控制中心,利用各种接口和线路连接整个电子设备的各个部分,通过运行或执行存储在存储器810内的软件程序和/或模块,以及调用存储在存储器810内的数据,执行电子设备800的各种功能和处理数据,从而对电子设备800进行整体监控。所述处理器820可以是中央处理器(centralprocessingunit,cpu),还可以是其他通用处理器、数字信号处理器(digitalsignalprocessor,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现成可编程门阵列(field-programmablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。

所述输入单元830可用于接收输入的数字或字符信息,以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。具体地,输入单元830可包括图像输入设备831以及其他输入设备832。图像输入设备831可以是摄像头,也可以是光电扫描设备。除了图像输入设备831,输入单元830还可以包括其他输入设备832。具体地,其他输入设备832可以包括但不限于物理键盘、功能键(比如音量控制按键、开关按键等)、轨迹球、鼠标、操作杆等中的一种或多种。

所述显示单元840可用于显示由用户输入的信息或提供给用户的信息以及电子设备的各种图形用户接口,这些图形用户接口可以由图形、文本、图标、视频和其任意组合来构成。显示单元840可包括显示面板841,可选的,可以采用液晶显示器(liquidcrystaldisplay,lcd)、有机发光二极管(organiclight-emittingdiode,oled)等形式来配置显示面板841。

所述rf电路850可用于收发信息或通话过程中,信号的接收和发送,特别地,将基站的下行信息接收后,交由一个或者一个以上处理器820处理;另外,将涉及上行的数据发送给基站。通常,rf电路850包括但不限于天线、至少一个放大器、调谐器、一个或多个振荡器、用户身份模块(sim)卡、收发信机、耦合器、低噪声放大器(lownoiseamplifier,lna)、双工器等。此外,rf电路850还可以通过无线通信与网络和其他设备通信。所述无线通信可以使用任一通信标准或协议,包括但不限于全球移动通讯系统(globalsystemofmobilecommunication,gsm)、通用分组无线服务(generalpacketradioservice,gprs)、码分多址(codedivisionmultipleaccess,cdma)、宽带码分多址(widebandcodedivisionmultipleaccess,wcdma)、长期演进(longtermevolution,lte)、电子邮件、短消息服务(shortmessagingservice,sms)等。

wifi属于短距离无线传输技术,电子设备800通过wifi模块860可以帮助用户收发电子邮件、浏览网页和访问流式媒体等,它为用户提供了无线的宽带互联网访问。虽然图8示出了wifi模块860,但是可以理解的是,其并不属于电子设备800的必须构成,完全可以根据需要在不改变发明的本质的范围内而省略。

所述电子设备800还包括给各个部件供电的电源870(比如电池),优选的,电源可以通过电源管理系统与处理器820逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。电源870还可以包括一个或一个以上的直流或交流电源、再充电系统、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。

需要说明的是,尽管未示出,所述电子设备800还可以包括蓝牙模块等,在此不再赘述。

本发明实施例还提供了一种存储介质,如图9所示,所述存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、该至少一段程序、该代码集或指令集可由电子设备的处理器执行以完成上述任一所述的任务处理方法。

可选地,在本发明实施例中,上述存储介质可以包括但不限于:u盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。

需要说明的是:上述本发明实施例先后顺序仅仅为了描述,不代表实施例的优劣。且上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。

本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置、电子设备和存储介质实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。

以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

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