CN109831394A - 数据处理方法、终端以及计算机存储介质 - Google Patents
数据处理方法、终端以及计算机存储介质 Download PDFInfo
- Publication number
- CN109831394A CN109831394A CN201711186460.8A CN201711186460A CN109831394A CN 109831394 A CN109831394 A CN 109831394A CN 201711186460 A CN201711186460 A CN 201711186460A CN 109831394 A CN109831394 A CN 109831394A
- Authority
- CN
- China
- Prior art keywords
- message
- storage unit
- business
- thread
- result
- 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.)
- Granted
Links
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本申请实施例公开了一种数据处理方法及装置,该方法包括:终端通过第一业务进程的第一业务线程将第一报文发送给数据处理设备,第一报文中包括第一报文ID,并将第一报文ID记录于第一业务线程中的第一缓存队列;终端通过转发进程获取数据处理设备反馈的第一结果报文,第一结果报文中包括第一报文ID;终端通过转发进程根据第一报文ID从第一共享线性表中确定出第一存储单元,并将第一结果报文存储至第一存储单元;终端通过第一业务线程根据第一缓存队列中记录的第一报文ID查找第一存储单元,从第一存储单元中读取第一结果报文,将第一报文ID从第一缓存队列中删除。采用本申请实施例,具有可提高数据处理可靠性,提高内存利用率的优点。
Description
技术领域
本申请涉及数据处理领域,尤其涉及一种数据处理方法、终端以及计算机存储介质。
背景技术
在维护公共安全组织(例如人民公安)的数据处理***、金融组织(例如银行)的数据处理***以及数据中心等应用场景中,使用硬件加速器(例如现场可编辑门阵列(fieldprogrammable gate array,FPGA))对常用的数据处理(例如加密、解密或者压缩等)进行硬件加速,使得数据处理***的性能得到提升。
硬件加速的数据处理流程包括:当某一业务进程的某一业务线程有业务数据需要进行硬件加速处理时,业务线程将业务数据发送给硬件加速器,硬件加速器对该业务线程的业务数据处理完成后,将处理结果通过转发进程返回给对应的业务线程,完成该业务线程的业务数据的硬件加速处理操作。在上述各应用场景中,需要进行数据处理的业务量大,并且单个业务进程启动的业务线程数量众多,各业务线程随着业务的生命周期而不断启动和/或退出,业务线程和转发进程中的转发线程之间的通信数据量大,复杂度高。
现有技术中,业务线程的业务数据处理结果由转发进程转发给业务线程,业务线程无法感知其业务数据的数据处理进度。现有技术中,当某一业务线程在其业务数据处理结束之前退出时,转发进程无法将该业务线程的业务数据处理结果返回至该业务线程,使得该业务线程的业务数据处理结果所占用的内存资源无法被及时回收,进而无法被其他业务线程所使用,数据处理***的内存利用率低,可靠性低。
发明内容
本申请实施例提供了一种数据处理方法、终端以及计算机存储介质,可提高终端数据处理***的内存利用率,提升终端的业务数据的硬件加速处理性能,适用性更高。
第一方面,本申请实施例提供了一种数据处理方法,该方法包括:终端通过第一业务进程的第一业务线程将第一报文发送给数据处理设备,其中,第一报文中包括第一报文标识ID和第一业务数据。终端通过第一业务线程将上述第一报文ID记录于第一业务线程中的第一缓存队列,第一缓存队列用于存储第一业务线程已经发送给数据处理设备但是还未接收到结果反馈的报文的ID。终端通过第一业务线程将第一报文ID记录在第一缓存队列中,以通过第一业务线程对发送给数据处理设备的第一报文的结果反馈状态进行监控,进而可实现业务线程对其发送给数据处理设备的报文的处理结果的主动感知,提高业务线程的报文的数据处理可靠性。终端通过转发进程获取数据处理设备反馈的第一结果报文,其中,该第一结果报文中包括第一报文ID和上述第一业务数据经所述数据处理设备处理得到的第二业务数据。终端通过转发进程根据第一报文ID从第一共享线性表中确定出第一存储单元,并将第一结果报文存储至第一存储单元,其中,第一共享线性表用于存储数据处理设备反馈的第一业务进程的各业务线程的结果报文。在本申请实施例中,每个业务进程可对应部署一个共享线性表,每个业务进程对应的共享线性表用于该业务进程内的所有业务线程与转发线程之间的线程间通信。同一个业务进程的不同业务线程的硬件加速处理结果报文存储至该业务进程的共享线性表中的不同存储单元,进而可避免业务进程内的业务线程的硬件加速处理结果的存储冲突,保证各个业务线程的硬件加速处理结果的存储可靠性,提高了终端数据处理***的内存资源的利用率,提高了线程间通信的可靠性,适用性更高。终端通过第一业务线程根据第一缓存队列中记录的第一报文ID查找第一存储单元,从第一存储单元中读取第一结果报文,将第一结果报文中携带的第一报文ID从第一缓存队列中删除。
在本申请实施例中,终端可通过第一业务线程对其发送给数据处理设备的报文的报文ID存储至第一业务线程内部署的第一缓存队列,进而可根据第一缓存队列中存储的报文ID主动从第一共享线性表中读取结果报文,实现了业务线程对报文的数据结果的主动获取,提高了业务线程的业务数据处理的可靠性。终端通过第一业务线程从第一共享线性表中读出第一报文的结果报文之后,第一报文的结果报文在第一共享线性表中所占用的内存资源则可用以存储其他业务线程的报文,进而可实现第一报文的结果报文所占用的内存资源的回收,提高共享线性表的内存资源的利用率,适用性更高。
此外,在本申请实施例中,终端通过第一业务线程从第一共享线性表中获取得到第一报文的结果报文之后,则可将第一报文的第一报文ID从第一缓存队列中删除,进而可将第一报文所占用的缓存队列资源腾出给其他报文使用,提高了缓存队列的资源利用率。
在一种可能的实施方式中,当确定第一业务线程从第一存储单元中读取第一结果报文失败时,终端通过转发进程将第一结果报文从第一存储单元中读出并存储至第一共享资源回收队列。其中,上述第一共享资源回收队列用于存储转发线程从第一共享线性表中读出的结果报文,可实现第一共享线性表中的残留报文的回收。终端通过第一业务进程的资源回收线程从第一共享资源回收队列中读取第一结果报文,并将第一结果报文中携带的第一报文ID从第一缓存队列中删除。
在本申请实施例中,当第一业务线程出现复位等异常状态时,第一业务线程从第一共享线性表的第一存储单元中读取第一结果报文失败,使得第一结果报文残留在第一共享线性表中,长时间占用着第一共享线性表的第一存储单元。为了避免第一结果报文长期占用第一存储单元,终端可通过转发进程将第一结果报文从第一共享线性表的第一存储单元从读取并存储至共享资源回收队列中,实现了第一业务线程的第一结果报文的回收和第一结果报文所占用的第一存储单元的回收,回收的第一存储单元可用以存储其他业务线程的结果报文,进而可提高共享线性表的内存资源的利用率,适用性更高。
在一种可能的实施方式中,终端通过第一业务进程的第一业务线程从第一业务进程的报文ID分配设备获取第一报文ID,并根据第一报文ID和第一业务线程的第一业务数据得到第一报文。这里,第一报文ID与报文ID分配设备分配给第一业务进程的其他报文的报文ID均各不相同,即报文ID分配装置分配给每个报文的ID均为进程内唯一的ID。在本申请实施例中,报文ID分配设备分配给每个报文的报文ID均为进程内唯一的报文ID,进而可保障在业务线程的启动和消亡的正常工作状态下,不同业务线程的硬件加速处理结果报文不会指向共享线性表中的同一个存储单元,进而可保证各个业务线程的硬件加速处理结果的存储可靠性,提高了线程间通信的可靠性,适用性更高。
在一种可能的实施方式中,数据处理设备反馈给转发进程的第一结果报文中可包括第一业务进程的第一进程ID;终端可通过转发进程获取第一结果报文中携带的第一业务进程的第一进程ID,并根据第一进程ID查找第一业务进程对应的第一共享线性表。在本申请实施例中,若终端中需要通过数据处理设备进行硬件加速处理的业务进程多于一个,则终端中部署的用于线程间通信的共享线性表也多于一个。因此,当转发进程获取得到数据处理设备反馈的第一结果报文之后,可根据第一结果报文中携带的第一进程ID,找到第一业务进程对应的共享线性表,即第一共享线性表,以将第一结果报文存储至第一共享线性表。本申请实施例提供的数据处理方法的适用场景多样,操作方式更灵活,适用性更强。
在一种可能的实施方式中,本申请实施例提供的包括第一共享线性表在内的任一共享线性表中可包括L个存储单元,L为大于或者等于1的整数。其中,每个存储单元至少包括存储单元索引和数据访问状态标记,上述数据访问状态标记用于标记存储单元的数据存储状态。上述存储单元的数据存储状态包括空闲、正在写、写完成、正在读以及读完成中的一种。
在本申请实施例中,存储单元的数据存储状态可由状态机的五种状态组成,其中,状态机的状态的变更顺序为:1空闲->2正在写->3写完成->4正在读->5读完成,并且状态机的这五种状态的变更必须按照如下1~5执行。本申请实施例通过状态机的状态来标记存储单元的数据存储状态,可保证在多业务线程并发读写该存储单元时,同一时刻只有一个业务线程可用对该存储单元的内容进行读或者写的操作,提高了存储单元的数据读写的可靠性。
在一种可能的实施方式中,终端可通过转发线程根据第一报文ID和共享线性表的存储单元个数L确定出第一索引,并将共享线性表中存储单元索引与第一索引相同的存储单元确定为第一存储单元,操作简单,存储单元的查找准确率高。
在一种可能的实施方式中,若终端通过转发进程确定第一存储单元的数据存储状态为空闲和/或读完成,则通过转发进程将第一结果报文写入第一存储单元,结果报文的存储操作简单。
在一种可能的实施方式中,若终端通过转发进程确定第一存储单元的数据存储状态为写完成,则通过转发进程将第一存储单元中存储的第二结果报文读出,并将第一结果报文写入第一存储单元。其中,第二结果报文为数据处理设备反馈的第二报文的结果报文,第二报文为第一业务进程通过第二业务线程发送给数据处理设备的报文。在本申请实施例中,终端可通过转发进程实现对第一共享线性表中的残留报文的回收,进而可实现第一共享线性表的内存资源的回收利用,增强第一共享线性表的内存资源的利用率。
在一种可能的实施方式中,上述第二结果报文中包括第二报文ID,第二报文ID记录于第二业务线程中的第二缓存队列。终端通过转发进程将第一存储单元中存储的第二结果报文读出之后,还可通过转发进程将第二结果报文存储至第一共享资源回收队列,实现第二业务线程的结果报文的回收。终端还可通过资源回收线程从第一共享资源回收队列中读取第二结果报文并存储至第一业务进程的内存池,其中,第一业务进程的内存池用于存储从第一共享线性表中回收的第一业务进程的各业务线程的结果报文,并将第二报文ID从所述第二缓存队列中删除,进而可在实现结果报文回收的同时,实现第二缓存队列的内存资源的回收再利用,提高第二缓存队列的内存资源的利用率。
在一种可能的实施方式中,若终端通过转发进程确定第一存储单元的数据存储状态为正在读,并且正在读的持续时间大于或者等于预设时间阈值,则确定第一业务线程从第一存储单元中读取第一结果报文失败。终端通过转发进程将第一结果报文从第一存储单元中读出并存储至第一共享资源回收队列。本申请实施例可对第一共享线性表中各存储单元的数据存储状态进行监控,进而可在残留报文长期占用某一存储单元时,通过转发线程将该存储单元中的残留报文读出,以回收该存储单元以用于存储其他结果报文,提高了共享线性表的内存资源的有效利用率。
在一种可能的实施方式中,终端可通过第一业务线程从第一缓存队列中读取第一报文ID,并根据第一报文ID和共享线性表的存储单元个数L确定出第二索引,通过第一业务线程从共享线性表中查找存储单元索引与第二索引相同的第一存储单元。可以理解,第一业务线程和转发进程均是通过第一报文ID从共享线性表中查找第一报文ID所指向的存储单元,因此,第一业务线程和转发进程根据第一报文ID查找的存储单元均为同一个存储单元,即第一存储单元。若确定第一存储单元的数据存储状态为写完成并且第一存储单元中存储的报文ID与第一报文ID相同,则确定第一存储单元中存储的报文为第一结果报文,并从第一存储单元中读取第一结果报文。本申请实施例可通过第一业务进程的第一业务线程主动从第一业务进程对应的第一共享线性表中读取第一业务线程的结果报文,实现结果报文的主动查找和获取,进而提高了业务线程的报文的处理完整性,增强业务线程的报文的数据处理可靠性。
在一种可能的实施方式中,若终端确定第一存储单元的数据存储状态为写完成,并且第一存储单元中存储的报文ID与第一报文ID不相同,则确定第一存储单元中存储的报文为第一结果报文之外的第二结果报文,并将第二结果报文从第一存储单元中读出并存储至第一业务进程的内存池。其中,第一业务进程的内存池用于存储从第一共享线性表中回收的第一业务进程的各业务线程的结果报文。本申请实施例可通过业务线程实现对共享线性表的存储单元中存储的残留报文的回收,增加了残留报文回收方式的多样性,适用性更强。
本申请实施例提供的硬件加速器可包括各种不同表现形式的硬件加速模块,该硬件加速器可为用于替代软件算法实现对数据处理速度的提升的硬件模块,该硬件加速器可为***到终端中的数据处理设备。本申请实施例提供的硬件加速器包括但不限于FPGA等硬件模块,在此不做限制。
下面将对本申请实施例提供的数据处理方法中涉及到的部分装置和/或数据结构进行说明:
一、内存池
在本申请实施例中,每个业务进程内可部署一个内存池(或称内存资源池),属于同一个业务进程的所有业务线程共享该业务进程的内存池。任一业务进程的内存池用于存储该业务进程的各业务线程的业务数据和/或由业务数据处理得到的报文,包括经过硬件加速处理后的该业务进程内的所有业务线程的结果报文。任一业务进程的内存池可分为多个内存块,每个业务线程可从其所属业务进程的内存池中申请一个内存块,任一业务线程申请得到的内存块可用于存储该业务线程需要进行硬件加速处理的业务数据。当该业务线程的业务数据经过硬件加速处理完成并且硬件加速处理结果返回到该业务线程时,该业务线程所占用的内存块则可释放回内存池,以供其他业务线程使用,实现内存资源的回收。
二、序列号标识(Serial Number identity,SNID)产生装置
在本申请实施例中,每个业务进程还可对应部署一个SNID产生装置,该SNID产生装置也可称为报文ID分配设备。该SNID产生装置用于产生进程内唯一的SNID,其中,SNID产生装置产生的SNID可用于标记报文,因此,SNID产生装置产生的SNID也可称为报文标识(identity,ID)。其中,同一个业务进程内的不同报文分别对应不同的SNID,进而可使得每个业务线程产生的每个报文对应的SNID均为该业务进程内唯一的SNID,进而保证了业务进程内的不同报文之间的SNID互斥。
三、SNID缓存队列
在本申请实施例中,每个业务线程部署一个SNID缓存队列,每个业务线程的SNID缓存队列用于记录该业务线程已经发送给硬件加速器进行硬件加速处理但是还没接收到处理结果的报文的SNID。当任一业务线程的某一个报文经过硬件加速器进行硬件加速处理后得到的结果报文返回到该业务线程时,该报文的SNID可从SNID缓存队列中删除,以该报文的SNID在SNID缓存队列中占用的内存资源进而可用以存储该业务线程的其他报文的SNID,实现内存资源的回收,提高了SNID缓存队列的内存资源利用率。
四、共享线性表
在本申请实施例中,转发进程上可部署一个转发线程。该转发线程用于将硬件加速器加速处理得到的报文转发给相应的业务线程。转发进程和业务进程之间的通信可由转发进程中部署的转发线程,和业务进程中的业务线程之间的线程间通信实现。在本申请实施例中,每个业务进程可对应部署一个共享线性表,每个业务进程对应的共享线性表用于该业务进程内的所有业务线程与转发线程之间的线程间通信。具体实现中,任一业务进程的任一业务线程的报文经过硬件加速器处理得到的结果报文可以以SNID为索引,在该业务进程对应的共享线性表中线性存放。
在本申请实施例中,任一业务进程上部署的共享线性表中可包括多个存储单元,每个存储单元用于存储一个结果报文。在硬件加速的数据处理机制中,一个业务进程中的一个或者多个业务线程有业务数据需要通过硬件加速器进行硬件加速处理时,该业务进程中的业务线程可批量发送K报文给硬件加速器,并且需要在这K个报文的硬件加速处理结果成功返回到各个业务线程之后,该业务进程的各个业务线程才会发生下一批的报文给硬件加速器。在本申请实施例中,可根据共享线性表的长度确定单个业务线程单次发送给硬件加速器的报文的数量上限,或者根据共享线性表的长度确定该业务进程的所有业务线程单次发送给硬件加速器的报文的总数量上限,其中,一个业务进程内的所有业务线程单次发送的报文的总数量上限不大于共享线性表的长度。由于每个业务线程发送的报文的SNID均为进程内唯一的SNID,即,同一个业务进程单次发送的各报文的SNID均不相同,因此通过控制单个业务线程单次发送的报文的数量上限,或者业务进程内的所有业务线程单次发送的报文的总数量上限,即可保障在业务线程的启动和消亡的正常工作状态下,不同业务线程的硬件加速处理结果报文不会指向共享线性表中的同一个存储单元,进而可保证各个业务线程的硬件加速处理结果的存储可靠性,提高了线程间通信的可靠性,适用性更高。
共享线性表中每个存储单元可由管理头和任意大小的数据块组成,其中管理头由互斥标志(MutexFlag)字段、报文ID字段、重试轮次(RetryCnt)字段以及保留域字段组成。
其中,上述互斥标志字段、报文ID字段、重试轮次字段以及保留域字段可简单介绍如下:
(1)互斥标志字段
可选的,该字段的字段名称可由MutexFlag表示。该字段可包括4个字节。互斥标志也可称为存储单元的数据访问状态标记,用于标记存储单元的数据存储状态。其中,上述存储单元的数据存储状态包括空闲、正在写、写完成、正在读或者读完成。上述存储单元的数据存储状态可由状态机的五种状态组成,其中,状态机的五种状态的变更顺序如下1~5,并且状态机的这五种状态的变更必须按照如下1~5执行,由此也可保证在多业务线程并发读写该存储单元时,同一时刻只有一个业务线程可用对该存储单元的内容进行读或者写的操作。
状态机的状态的变更顺序为:1空闲->2正在写->3写完成->4正在读->5读完成。
可选的,上述存储单元的数据存储状态可分别由互斥标志1、2、3、4和5表示,其中,1表示空闲,2表示正在写,3表示写完成,4表示正在读,5表示读完成。其中,表示读完成的状态值与表示空闲的状态值也可相同,即状态机的状态变更至读完成时也即回到空闲状态。
(2)报文ID字段
可选的,该字段的字段名称可用SIND表示。其中,报文ID字段可包括4个字节,报文ID字段用于存储写入到该存储单元的结果报文的SNID。
(3)重试轮次字段
其中,重试轮次字段也可包括4个字节,该字段的字段名称可由RetryCnt表示。转发线程在将任一业务线程的结果报文写入该存储单元时,如果经过多次尝试,该存储单元的数据存储状态仍然无法满足写入条件,则记为该存储单元的一次重试轮次。重试轮次用以防止共享线性表中的残留报文长期占用存储单元。
(4)保留域
可选的,保留域的字段名称可用Resv表示。其中,上述保留域也可包括4个字节,用于将存储单元的管理头的字节总数填充至16字节。
可选的,该保留域中填充的内容无要求,具体可根据实际应用场景需求确定,在此不做限制。
在本申请实施例中,转发进程中部署的转发线程和业务线程之间可使用共享线性表来实现线程间的通信,其中转发线程对共享线性表的存储单元进行写数据操作和/或对存储单元中存储的内容进行读操作,业务线程对共享线性表的存储单元中存储的内容进行读操作。
五、共享资源回收队列
在本申请实施例中,每个业务进程可部署一个共享资源回收队列。任一业务进程的共享资源回收队列用于缓存从该业务进程的共享线性表中回收的残留报文。在本申请实施例中,共享线性表中的残留报文指没有成功返回到对应业务线程的硬件加速处理得到的结果报文。在本申请实施例中,转发线程可从共享线性表中读取残留报文并存储至共享资源回收队列中,进而释放出残留报文所占用的共享线性表的存储单元,实现了残留报文所占用的内存资源的回收,进而提高共享线性表的存储单元的内存资源有效利用率。
六、资源回收线程
在本申请实施例中,每个业务进程可部署一个资源回收线程,该资源回收线程用于周期性查询该业务进程对应的共享资源回收队列,读取该共享资源回收队列中存储的残留报文并释放该残留报文所占用的内存块释放回该业务进程的内存池中,实现了内存资源的自动回收,进而可提高业务进程的内存池的有效利用率。
第二方面,本申请实施例提供了一种数据处理装置,该装置包括:收发单元和处理单元。
收发单元,用于通过第一业务进程的第一业务线程将第一报文发送给数据处理设备,该第一报文中包括第一报文标识ID和第一业务数据。
处理单元,用于将收发单元发送给数据处理设备的第一报文的第一报文ID记录于第一业务线程中的第一缓存队列。
上述收发单元,还用于通过转发进程获取数据处理设备反馈的第一结果报文,该第一结果报文中包括第一报文ID和第一业务数据经数据处理设备处理得到的第二业务数据。
上述处理单元,还用于通过转发进程根据第一报文ID从第一共享线性表中确定出第一存储单元,并将第一结果报文存储至第一存储单元。其中,第一共享线性表用于存储数据处理设备反馈的第一业务进程的各业务线程的结果报文。
上述处理单元,还用于通过第一业务线程根据第一缓存队列中记录的第一报文ID查找第一存储单元,从第一存储单元中读取第一结果报文,将第一结果报文中携带的第一报文ID从第一缓存队列中删除。
在一种可能的实施方式中,上述处理单元,还用于当确定第一业务线程从第一存储单元中读取第一结果报文失败时,通过转发进程将第一结果报文从第一存储单元中读出并存储至第一共享资源回收队列。其中,上述第一共享资源回收队列用于存储转发进程从第一共享线性表中读出的结果报文。上述处理单元,还用于通过第一业务进程的资源回收线程从第一共享资源回收队列中读取第一结果报文,并将第一结果报文中携带的第一报文ID从第一缓存队列中删除。
在一种可能的实施方式中,上述处理单元,还用于通过第一业务进程的第一业务线程从第一业务进程的报文ID分配设备获取第一报文ID,并根据第一报文ID和第一业务线程的第一业务数据得到第一报文。其中,上述第一报文ID与报文ID分配设备分配给第一业务进程的其他报文的报文ID均各不相同。
在一种可能的实施方式中,上述第一结果报文中还包括第一业务进程的第一进程ID。上述处理单元,还用于通过转发进程获取第一结果报文中携带的第一业务进程的第一进程ID,并根据第一进程ID查找第一业务进程对应的第一共享线性表。
在一种可能的实施方式中,上述第一共享线性表中包括L个存储单元,L为大于或者等于1的整数。其中,每个存储单元至少包括存储单元索引和数据访问状态标记,上述数据访问状态标记用于标记存储单元的数据存储状态。其中,上述存储单元的数据存储状态包括空闲、正在写、写完成、正在读以及读完成中的一种。
在一种可能的实施方式中,上述处理单元,用于通过转发进程根据第一报文ID和共享线性表的存储单元个数L确定出第一索引,并将共享线性表中存储单元索引与第一索引相同的存储单元确定为第一存储单元。
在一种可能的实施方式中,上述处理单元,用于通过转发进程确定第一存储单元的数据存储状态为空闲和/或读完成,则通过转发进程将第一结果报文写入第一存储单元。
在一种可能的实施方式中,上述处理单元,用于在通过转发进程确定第一存储单元的数据存储状态为写完成时,通过转发进程将第一存储单元中存储的第二结果报文读出,并将第一结果报文写入第一存储单元。可以理解,这里第二结果报文为数据处理设备反馈的第二报文的结果报文,第二报文为第一业务进程通过第二业务线程发送给数据处理设备的报文。
在一种可能的实施方式中,上述第二结果报文中包括第二报文ID,该第二报文ID记录于第二业务线程中的第二缓存队列。上述处理单元,用于通过转发进程将第二结果报文存储至第一共享资源回收队列,通过资源回收线程从第一共享资源回收队列中读取第二结果报文并存储至第一业务进程的内存池,并将第二报文ID从第二缓存队列中删除。这里,第一业务进程的内存池用于存储从第一共享线性表中回收的第一业务进程的各业务线程的结果报文。
在一种可能的实施方式中,上述处理单元,用于在通过转发进程确定第一存储单元的数据存储状态为正在读,并且正在读的持续时间大于或者等于预设时间阈值时,确定第一业务线程从第一存储单元中读取第一结果报文失败,并通过转发进程将第一结果报文从第一存储单元中读出并存储至第一共享资源回收队列。
在一种可能的实施方式中,上述处理单元用于:通过第一业务线程从第一缓存队列中读取第一报文ID,并根据第一报文ID和共享线性表的存储单元个数L确定出第二索引。通过第一业务线程从共享线性表中查找存储单元索引与第二索引相同的上述第一存储单元,若确定上述第一存储单元的数据存储状态为写完成并且第一存储单元中存储的报文ID与第一报文ID相同,则确定第一存储单元中存储的报文为第一结果报文,并从第一存储单元中读取第一结果报文。
在一种可能的实施方式中,上述处理单元,还用于在确定第一存储单元的数据存储状态为写完成,并且第一存储单元中存储的报文ID与第一报文ID不相同时,确定第一存储单元中存储的报文为第一结果报文之外的第二结果报文,并将第二结果报文从第一存储单元中读出并存储至第一业务进程的内存池。其中,可以理解,第一业务进程的内存池用于存储从第一共享线性表中回收的第一业务进程的各业务线程的结果报文。
本申请实施例提供的数据处理装置可通过其包括的收发单元和处理单元执行第一方面提供的数据处理方法,因此也能实现第一方面提供的数据处理方法所具备的有益效果。
第三方面,本申请实施例提供了一种终端,该终端包括存储器、收发器和处理器;其中,该存储器用于存储一组程序代码,收发器和处理器用于调用存储器中存储的程序代码执行上述第一方面和/或第一方面中任意一种可能的实现方式所提供的数据处理方法,因此也能实现第一方面提供的数据处理方法所具备的有益效果。
第四方面,本申请实施例提供了一种通信***,该***包括数据处理设备和第三方面提供的终端,该***用于实现第一方面提供的数据处理方法,因此也能实现第一方面提供的数据处理方法所具备的有益效果。
第五方面,本申请实施例提供了一种计算机可读存储介质,该计算机可读存储介质中存储有指令,当该指令在计算机上运行时,使得计算机执行上述第一方面提供的数据处理方法,也能实现第一方面提供的数据处理方法所具备的有益效果。。
第六方面,本申请实施例提供了一种芯片,该芯片中包括与终端的收发器耦合,用于执行本申请实施例第一方面提供的技术方案。
第七方面,本申请实施例提供了一种芯片***,该芯片***包括处理器,用于支持终端实现上述第一方面中所涉及的功能,例如,生成或者处理上述第一方面提供的数据处理方法中所涉及的信息。在一种可能的设计中,上述芯片***还包括存储器,该存储器用于保存终端必需的程序指令和数据。该芯片***可以由芯片构成,也可以包含芯片和其他分立器件。
第八方面,本申请实施例提供了一种包含指令的计算机程序产品,当该计算机程序产品在计算机上运行时,使得计算机执行上述第一方面提供的数据处理方法,也能实现第一方面提供的数据处理方法所具备的有益效果。
通过实施本申请实施例,可提高终端数据处理***的内存利用率,提升终端的业务数据的硬件加速处理性能,适用性更高。
附图说明
为了更清楚地说明本申请的技术方案,下面将对本申请实施例描述中所需要使用的附图作简单地介绍。
图1是本申请实施例提供的数据处理***的结构示意图;
图2是硬件加速的数据处理流程的一交互示意图;
图3是硬件加速的数据处理流程的另一交互示意图;
图4是本申请实施例提供的数据处理方法的一交互示意图;
图5是本申请实施例提供的序列号标识的产生示意图;
图6是本申请实施例提供的数据处理方法的一流程示意图;
图7是本申请实施例提供的共享线性表的结构示意图;
图8是本申请实施例提供的数据处理装置的结构示意图;
图9是本申请实施例提供的一种通信设备的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述。
参见图1,图1是本申请实施例提供的数据处理***的结构示意图。
本申请实施例提供的数据处理方法适用于数据处理***10,上述数据处理***10中包括服务器11和可拔插连接于该服务器上的硬件加速器12。其中,上述服务器11具体可为用作数据处理的终端,本申请实施例将以服务器为例进行说明。在本申请实施例中,上述服务器可包括处理器111、存储器112和收发器113。上述存储器112用于存储程序代码,上述处理器111和收发器用于调用上述存储器112中存储的程序代码,执行本申请实施例提供的数据处理方法。
本申请实施例提供的硬件加速(hardware acceleration)可指利用硬件模块来替代软件算法以充分利用硬件所固有的快速特性,以实现对数据处理速度的提升。本申请实施例提供的硬件加速器12可包括各种不同表现形式的硬件加速模块,该硬件加速器12可为用于替代软件算法实现对数据处理速度的提升的硬件模块,该硬件加速器12可为***到服务器中的数据处理设备。具体的,可在某数据处理***的服务器11中***一个或者多个硬件加速器(例如图1所示的硬件加速器12),通过硬件加速器12实现对该数据处理***中常用的数据处理进行硬件加速。本申请实施例提供的硬件加速器包括但不限于FPGA等硬件模块,在此不做限制。
参见图2,图2是硬件加速的数据处理流程的一交互示意图。
可选的,在该硬件加速的数据处理流程中,需要加速的业务以线程的形态存在,例如图2中的业务线程1、业务线程2和业务线程3。其中,业务线程1、业务线程2和业务线程3属于同一个业务进程,例如业务进程1。
在图2所示的数据处理流程中,一个业务线程(例如业务线程1)的硬件加速处理过程可包括①~⑦的7个数据处理节点(或称数据处理环节):
①业务线程1将由业务数据处理得到的报文(例如报文1)存入下行队列。
②下行队列存储报文1。
③硬件加速器从下行队列中获取报文1。
硬件加速器对报文1中的业务线程1的业务数据等内容进行硬件加速处理以得到处理后的结果报文(即由报文1处理得到的报文,例如报文1’),并将处理得到的报文1’存入上行队列。
④上行队列存储报文1’。
⑤转发进程通过转发线程(例如转发线程1)周期性轮询上行队列,从上行队列中获取硬件加速器处理后的报文,例如报文1’。
⑥转发线程1通过线程间通信的方式将经过硬件加速处理后的业务线程1的报文(例如报文1’)转发给业务进程1的业务线程(例如业务线程1)。
⑦业务线程1通过线程间通信的方式接收转发线程1发送的业务线程1的报文1’,进而完成业务线程1的报文的硬件加速处理。
然而,随着单个业务进程启动的业务线程的数据的增加,图2所示的硬件加速的数据处理流程也面临着更大的挑战和难题。例如,在实际的业务应用过程中,单个业务进程启动的业务线程数量往往可达到100个以上,而整个服务器所有的业务进程启动的业务线程的总数往往可超过1000个。图2所示的硬件加速的数据处理流程中,硬件加速器将需要对数量众多的业务线程提供硬件加速服务,数据处理量大使得对硬件加速器的性能要求也更高。
此外,在图2所示的数据处理流程中,各业务线程的业务数据的硬件加速处理结果由转发线程通过转发线程与业务线程之间的线程间通信分别转发给对应的业务线程,这对转发线程与业务线程之间的通信的性能要求高。硬件加速的效果是否明显,依赖于转发线程与业务线程之间的通信的性能高低,因此,如何提高转发线程和业务线程之间的线程间通信的性能也成为亟待解决的难题之一。
进一步的,在图2所示的数据处理过程中,当某一业务线程被异常复位时,该业务线程被强制退出,此时该业务线程的业务数据可能还处于硬件加速的任一环节中,例如图2中的①~⑦的任一数据处理节点。此时,对于该业务线程的业务数据所占用的业务线程内部内存资源,例如图2中的①和⑦两个数据处理节点所占用的内存,可以在该业务线程退出时主动回收。然而,该业务线程被异常复位,使得该业务线程的业务数据的硬件加速处理结果无法通过转发线程返回给该业务线程,因此,该业务线程所占用的中间任一环节(例如图2中的②~⑥中的任一数据处理节点)的内存也无法被及时回收,进而无法被其他业务线程所使用。因此,如何保证内存的可靠回收以提高内存的有效利用率,也是亟待解决的难题之一。
为了解决上述图2所示的数据处理流程所面对的难题,对于线程间通信和/或内存回收所面临的难题可采用如下图3所示的数据处理流程中相应的处理方式解决。
参见图3,图3是硬件加速的数据处理流程的另一交互示意图。
在图3所示的数据处理流程中,类似于图2所示的数据处理流程,需要加速的业务以线程的形态存在,例如业务线程1、业务线程2和业务线程3,并且业务线程1、业务线程2和业务线程3属于同一个业务进程,例如业务进程1。与图2所示的数据处理流程所不同的是,在图3所示的数据处理流程中,在业务线程(例如业务线程1、业务线程2和业务线程3)启动时,可动态创建共享队列,其中,一个业务线程对于一个共享队列。例如,业务线程1、业务线程2业务和线程3分别对应共享队列1、共享队列2和共享队列3。其中,共享队列用于转发进程与业务线程之间的通信。任一业务线程对应的共享队列用于存储携带该业务线程的标识(identity,ID)以及该业务线程所属的业务进程ID的报文。如图3所示,一个业务线程(例如业务线程1)的硬件加速处理过程可包括①~⑦的7个数据处理节点:
①业务线程1将由业务数据处理得到的报文(例如报文1)存入下行队列。
②下行队列存储报文1。
③硬件加速器从下行队列中获取报文1。
硬件加速器对报文1中的业务线程1的业务数据等内容进行硬件加速处理以得到处理后的报文,并将处理得到的报文(例如报文1’)存入上行队列。
④上行队列存储报文1’。
⑤转发进程通过转发线程(例如转发线程1)周期性轮询上行队列,从上行队列中获取硬件加速器处理后的报文,例如报文1’。
⑥转发线程根据经过硬件加速处理后的业务线程1的报文(报文1’)中携带的业务进程ID和业务线程ID,将报文1’放入业务线程1对应的共享队列中,例如共享队列1。
⑦业务线程1调度属于自己的共享队列(例如共享队列1),接收共享队列1中存储的报文(例如报文1’),完成业务线程1的报文的硬件加速处理。
此外,如图3所示,在该数据处理流程中,业务进程(例如业务进程1)和转发进程之外还包括一个监控进程,该监控进程用于周期性地监控各个业务进程的状态,承担内存监控和回收的职责。如果任一业务进程(例如业务进程1)中出现新的业务线程(例如业务线程1-3中的任一个)启动,则将该业务线程注册到监控进程中,进而可通过监控进程对业务线程进行监控。如果监控进程监控得到某一业务线程(例如业务线程2)被异常复位,监控进程可在等待一段时间后,将线程间通信中业务线程2对应的共享队列(例如共享队列2)回收,并释放共享队列2中的内存资源,实现内存资源的回收。
然而,在图3所示的数据处理流程中,每次一个业务线程启动或者消亡时,都要动态创建一个共享队列或者回收一个共享队列,操作繁琐。此外,每个业务线程启动都要创建一个共享队列,当业务线程的数量较多时,共享队列的动态创建和回收所消耗的内存资源也将非常多。随着业务线程的数量的增加,共享队列的动态创建和/或回收也将变得更加复杂,资源消耗量大,适用性差。另外,由于线程间通信的共享队列的长度有限,当业务线程存在流量突发的状态时,将容易出现共享队列被填满而出现数据溢出等现象,进而导致业务线程的数据丢包等情况发生,可靠性低。
进一步的,在图3所示的数据处理流程在内存回收的效率方面也存在着缺陷。例如,在图3所示的数据处理流程中,需要额外部署一个监控进程,监控进程需要周期性地监控所有业务线程的启动或者消亡等状态。当业务线程的数量众多时,监控进程对业务线程的监控效率低。同时,监控进程需要准确并及时判断出业务线程是否复位,实现难度非常大,误判概率高。
此外,在图3所示的数据处理流程在内存回收可靠性方面也存在着缺陷。例如,在某一业务线程复位时,该业务线程的业务数据可能还在硬件加速器和转发进程之间处理(图3中的环节③~⑤之间)。图3所示的数据处理流程,监控进程在监控到某一业务线程复位后,延迟等待一段时间,然后直接回收该业务线程对应的线程间通信的共享队列的内存资源。在该数据处理流程中,监控进程延迟等待的时间难以准确控制,可能出现该业务线程对应的共享队列以及该共享队列的内存资源已经回收完毕,但是该业务线程仍然还有部分业务数据在硬件加速器中或者在上行队列中,从而产生业务线程的数据泄露等问题,内存回收的可靠性差,业务线程的业务数据的硬件加速处理的稳定性差,适用性低。
本申请实施例提供了一种数据处理方法及终端,可提供简单可靠的线程间通信机制,可减少随着业务线程的数量的增加所带来的资源消耗,提高业务线程的业务数据的硬件加速可靠性。进一步的,本申请实施例提供的数据处理方法还可降低硬件加速的内存资源回收的实现难度,提高硬件加速的数据处理过程中内存资源回收的效率和可靠性,适用性更高。
下面将结合图4至图9,对本申请实施例提供的数据处理方法及终端进行描述。
参见图4,是本申请实施例提供的数据处理方法的一交互示意图。
本申请实施例提供的数据处理方法可由包括终端(例如图1中的服务器11,为方便描述,后续将直接以服务器进行说明)和数据处理设备(例如图1中的硬件加速器12,为方便描述,后续将直接以硬件加速器进行说明)等数据处理装置执行。其中,服务器上可运行一个或者多个业务进程,每个业务进程可包括一个或者多个业务线程。在本申请实施例中,需要加速的业务也以线程的形态存在,例如业务线程1、业务线程2和业务线程3,并且业务线程1、业务线程2和业务线程3属于同一个业务进程,例如业务进程1。
下面将结合图4对本申请实施例提供的数据处理方法中涉及到的部分装置和/或数据结构进行说明:
一、内存池
在本申请实施例中,每个业务进程内可部署一个内存池(或称内存资源池),属于同一个业务进程的所有业务线程共享该业务进程的内存池。任一业务进程的内存池用于存储该业务进程的各业务线程的业务数据和/或由业务数据处理得到的报文,包括经过硬件加速处理后的该业务进程内的所有业务线程的结果报文。具体实现中,任一业务进程的内存池可分为多个内存块,每个业务线程可从其所属业务进程的内存池中申请一个内存块,任一业务线程申请得到的内存块可用于存储该业务线程需要进行硬件加速处理的业务数据。当该业务线程的业务数据经过硬件加速处理完成并且硬件加速处理结果返回到该业务线程时,该业务线程所占用的内存块则可释放回内存池,以供其他业务线程使用,实现内存资源的回收。例如,业务进程1中的业务线程1、业务线程2和业务线程3可分别从业务进程1中部署的内存池(例如内存池1)中申请得到一个内存块,可分别用于保存需要进行硬件加速处理的业务线程1、业务线程2和业务线程3的业务数据,以由存储在各内存块中的业务数据处理得到各个业务线程发送给硬件加速器的报文。
二、序列号标识(Serial Number identity,SNID)产生装置
在本申请实施例中,每个业务进程还可对应部署一个SNID产生装置,该SNID产生装置用于产生进程内唯一的SNID。其中,SNID产生装置产生的SNID可用于标记报文,因此,SNID产生装置产生的SNID也可称为报文标识(identity,ID)。该SNID产生装置也可称为报文ID分配设备,为方便描述,后续将以SNID产生装置为例进行说明。其中,同一个业务进程内的不同报文分别对应不同的SNID,进而可使得每个业务线程产生的每个报文对应的SNID均为该业务进程内唯一的SNID,进而保证了业务进程内的不同报文之间的SNID互斥。
参见图5,是本申请实施例提供的序列号标识的产生示意图。在本申请实施例中,SNID的产生规则包括:从0开始,依次加1。例如,一个业务进程(例如业务进程1)内有3个业务线程,例如业务线程1、业务线程2和业务线程3。假设在t0时刻,第一个业务线程(例如业务线程2)申请SNID时,SNID产生装置可产生第一个SNID,该SNID为0。假设在t0时刻之后的t1时刻,第二个业务线程(假设业务线程3)申请SNID,SNID产生装置则可产生第二个SNID,该SNID为1。以此类推,根据不同时刻的业务线程的申请,按照时间顺序依次加1得到新的SNID,SNID的取值范围可为0~232-1。
此外,如图5所示,为了保证业务线程间互斥,若多个业务线程同一时刻申请SNID,则需要保证每个业务线程申请到的SNID均不相同。例如,在t3时刻,业务线程2和业务线程3同时申请SNID,则需要为业务线程2和业务线程3分配不同的SNID,例如业务线程3分配的SNID为3,业务线程2分配的SNID为4等,进而可保证各业务线程向硬件加速器发送的不同报文之间的SNID互斥。
三、SNID缓存队列
在本申请实施例中,每个业务线程部署一个SNID缓存队列,每个业务线程的SNID缓存队列用于记录该业务线程已经发送给硬件加速器进行硬件加速处理但是还没接收到处理结果的报文的SNID。例如,业务线程1中部署了一个SNID缓存队列(为方便描述可标记为SNID缓存队列1),业务线程1发送给硬件加速器进行硬件加速处理的一个或者多个报文的SNID(其中包括报文1的SNID,例如SNID1)可记录在SNID缓存队列1中。当业务线程1的某一个报文(例如报文1)经过硬件加速器进行硬件加速处理后得到的结果报文(例如报文1’)返回到业务线程1时,SNID1可从SNID缓存队列1中删除,以释放SNID1在SNID缓存队列1中占用的内存资源进而可用以存储业务线程1的其他报文的SNID,实现内存资源的回收。若业务线程1的另一个报文(例如报文2)发送给硬件加速器之后,报文2的硬件加速处理结果还未返回到业务线程1,则报文2的SNID(例如SNID2)则继续记录在SNID缓存队列1中。
四、共享线性表
在本申请实施例中,转发进程上可部署一个转发线程。该转发线程用于将硬件加速器加速处理得到的报文转发给相应的业务线程。转发进程和业务进程之间的通信可由转发进程中部署的转发线程,和业务进程中的业务线程之间的线程间通信实现。
在本申请实施例中,每个业务进程可对应部署一个共享线性表,每个业务进程对应的共享线性表用于该业务进程内的所有业务线程与转发线程之间的线程间通信。具体实现中,任一业务进程的任一业务线程的报文经过硬件加速器处理得到的结果报文可以以SNID为索引,在该业务进程对应的共享线性表中线性存放。
在本申请实施例中,任一业务进程(以业务进程1为例)上部署的共享线性表(例如共享线性表1)中可包括多个存储单元,每个存储单元用于存储一个结果报文。可选的,每个存储单元在共享线性表中的位置可通过一个编号标记,例如,在图4中,编号0、1、2、3、…直至L-1可分别标记单共享线性表1中的存储单元1、存储单元2、存储单元3、…直至存储单元L-1。可选的,各存储单元的编号即可为各存储单元在共享线性表中的存储单元索引。具体实现中,任一业务进程(例如业务进程1)中的任一业务线程(例如业务线程1)的结果报文(例如报文1’)在共享线性表中的存放位置可由该结果报文的SNID和该共享线性表的长度确定。其中,上述共享线性表的长度即为该共享线性表中包括的存储单元的数量,为方便描述可设为L,其中,L为大于1的整数。上述存放位置具体可为该共享线性表中的某一个存储单元,该存储单元的存储单元索引可由该结果报文的SNID%共享线性表的长度确定。例如,假设报文1’在共享线性表1中存放的存放位置为共享线性表1中的存储单元A,则存储单元A的存储单元索引=SNID1%L。
在硬件加速的数据处理机制中,一个业务进程中的一个或者多个业务线程有业务数据需要通过硬件加速器进行硬件加速处理时,该业务进程中的业务线程可批量发送K报文给硬件加速器,并且需要在这K个报文的硬件加速处理结果成功返回到各个业务线程之后,该业务进程的各个业务线程才会发生下一批的报文给硬件加速器。例如,假设该业务进程中有3个业务线程,并且每个业务线程单批发送报文的数量上限为P个,则该业务进程单批向硬件加速器发送的报文的数量上限为3P,即K小于或者等于3P。假设该业务进程的3个业务线程单批发送给硬件加速器的报文的数量均为P,则在硬件加速的数据处理机制中,这3个业务线程均需要在接收到其发送的P个报文的硬件加速处理结果之后,才会发送下一批的P个报文给硬件加速器。
在本申请实施例中,可根据共享线性表的长度确定单个业务线程单次发送给硬件加速器的报文的数量上限,或者根据共享线性表的长度确定该业务进程的所有业务线程单次发送给硬件加速器的报文的总数量上限,其中,一个业务进程内的所有业务线程单次发送的报文的总数量上限不大于共享线性表的长度,例如3P<=L。由于每个业务线程发送的报文的SNID均为进程内唯一的SNID,即,同一个业务进程单次发送的各报文的SNID均不相同,因此通过控制单个业务线程单次发送的报文的数量上限,或者业务进程内的所有业务线程单次发送的报文的总数量上限,即可保障在业务线程的启动和消亡的正常工作状态下,不同业务线程的硬件加速处理结果报文不会指向共享线性表中的同一个存储单元,进而可保证各个业务线程的硬件加速处理结果的存储可靠性,提高了线程间通信的可靠性,适用性更高。
五、共享资源回收队列
在本申请实施例中,每个业务进程可部署一个共享资源回收队列。任一业务进程的共享资源回收队列用于缓存从该业务进程的共享线性表中回收的残留报文。在本申请实施例中,共享线性表中的残留报文指没有成功返回到对应业务线程的硬件加速处理得到的结果报文。例如,某一个业务线程的报文发送给硬件加速器进行硬件加速处理,在该报文的硬件加速处理结果还未存储到相应的共享线性表时,该业务线程被异常复位了,进而使得该报文的硬件加速处理结果存储到相应的共享线性表之后没有被读取。此时,残留在该共享线性表中的该业务线程的硬件加速处理结果(即硬件加速处理得到的报文)则为残留报文。可选的,在某一个业务线程的报文的硬件加速处理结果存储到相应的共享线性表但是还未被转发给该业务线程时,该业务线程被异常复位了,此时,该业务线程的硬件加速处理结果(即报文)即为残留报文。
在本申请实施例中,转发线程可从共享线性表中读取残留报文并存储至共享资源回收队列中,进而释放出残留报文所占用的共享线性表的存储单元,实现了残留报文所占用的内存资源的回收,进而提高共享线性表的存储单元的内存资源有效利用率。
六、资源回收线程
在本申请实施例中,每个业务进程可部署一个资源回收线程,该资源回收线程用于周期性查询该业务进程对应的共享资源回收队列,读取该共享资源回收队列中存储的残留报文并释放该残留报文所占用的内存块释放回该业务进程的内存池中,实现了内存资源的自动回收,进而可提高业务进程的内存池的有效利用率。
下面将结合图6、图7以及上述各装置和/或数据结构对本申请实施例提供的数据处理方法的数据处理流程和/或内存资源回收方式进行说明。
图6是本申请实施例提供的数据处理方法的一流程示意图。
本申请实施例提供了数据处理方法可包括步骤:
S1,服务器通过第一业务进程的第一业务线程将第一报文发送给硬件加速器。
在一种可行的实施方式中,本申请实施例所描述的服务器即为用作数据处理的终端,为方便描述,下面将以服务器为例进行说明。本申请实施例提供的硬件加速器即为插接到上述服务器中的数据处理设备,用以对上述服务器发送的数据进行硬件加速处理,为方便描述,下面将以硬件加速器为例进行说明。
在一种可行的实施方式中,当服务器中的任一业务进程(设为第一业务进程,为方便描述,下面将以业务进程1为例进行说明)的任一业务需要进行硬件加速处理时,该业务可以以业务线程(设为第一业务线程,为方便描述,下面将以业务线程1为例进行说明)的形态存在,业务线程1可将该需要进行硬件加速处理的业务数据发送给硬件加速器处理。业务线程1可从业务进程1内部署的内存池中申请一个内存块(为方便描述,可设为内存块1),并将需要进行硬件加速处理的业务数据(或称源业务数据)填写到内存块1中,并将该业务数据进行封装得到等待发送给硬件加速器处理的报文(为方便描述可设定为第一报文,例如上述报文1)。
可选的,业务线程1还可向业务进程1内部署的SNID产生装置(即报文ID分配设备)申请一个SNID。业务进程1内部署的SNID产生装置可根据上述SNID产生规则,以及业务线程之间的SNID互斥的原则,分配一个SNID(例如SNID1)给业务线程1。业务线程1从业务进程1的SNID产生装置获取得到该SNID1之后,则可将该SNID1作为业务线程1的报文1的报文ID添加到报文1中。其中,报文1的报文ID(即SNID1)与业务进程1通过任一业务线程发送给硬件加速器的任一其他报文的报文ID均不相同,即SNID1为第一业务进程内的唯一ID。上述SNID产生装置分配给上述任一其他报文的报文ID业务也均各不相同,即SNID产生装置分配给任一报文的报文ID均为业务进程内的唯一ID,以实现业务进程内的报文ID的互斥。
可选的,业务线程1还可将其所在的进程(即业务进程1)的进程ID(为方便描述可设为第一进程ID)以及其他与硬件加速器约定的自定义信息填写入上述报文1中,以将上述报文1发送给硬件加速器进行硬件加速处理。
可选的,上述服务器通过业务线程1处理得到报文1之后,则可通过业务线程1将报文1的SNID存入业务线程1内部署的SNID缓存队列(为方便描述可设定为第一缓存队列),并将报文1存入下行队列中,以通过下行队列将报文1传送给硬件加速器。业务线程1可通过对其内部部署的SNID缓存队列中记录的SNID的状态确定发送给硬件加速器进行硬件加速处理的报文的处理结果是否已成功返回,或者根据该SNID缓存队列中存储的SNID从业务进程1对应的共享线性表(例如第一共享线性表)中查找和/或读取相应的结果报文等。
其中,下行队列是服务器的业务进程与硬件加速器进行通信的一共享队列。上述下行队列用于存储从服务器发往硬件加速器的报文。服务器的业务进程(例如业务进程1)的任一业务线程(例如业务线程1)将报文(例如报文1)存入该下行队列中,硬件加速器则可从该下行队列中获取报文1,实现报文在服务器与硬件加速器之间的传输。
硬件加速器从下行队列中获取得到报文之后,则可对获取的报文进行硬件加速处理。例如,硬件加速器从上述下行队列中获取得到报文1之后,则可对报文1进行硬件加速处理以得到报文1’。硬件加速器对获取到的报文(例如报文1)进行硬件处理得到处理后的结果报文(例如报文1’)之后,则可将结果报文存入上行队列中,以通过上行队列将处理后的结果报文返回给服务器。
其中,上述上行队列是上述服务器的业务进程与硬件加速器之间进行通信的另一共享队列。上述上行队列用于存储从硬件加速器发往服务器的报文。
S2,服务器通过转发线程获取所述数据处理设备反馈的第一结果报文。
在一种可行的实施方式中,服务器可通过转发进程中的转发线程周期性轮询上述上行队列,从上述上行队列中获取硬件加速器处理后的结果报文。其中,上述转发线程从上行队列中获取的报文可包括报文1的硬件加速处理结果的结果报文,即报文1’。其中,上述报文1’中可包括报文1的报文ID(例如SNID1)以及由报文1中包括的第一业务数据处理得到的第二业务数据。
可选的,转发线程从上行队列中获取的结果报文中还可包括该结果报文所属的业务进程的进程ID。例如,转发线程从上行队列中获取的报文1’中还可包括业务进程1的进程ID(即第一进程ID)。
S3,服务器通过转发线程根据第一报文ID从第一共享线性表中确定出第一存储单元。
其中,上述第一共享线性表用于存储硬件加速器反馈的上述业务进程1的各业务线程的结果报文,即,第一共享线性表为业务进程1专属的线性表。
在一种可行的实施方式中,若服务器中需要通过硬件加速器进行硬件加速处理的业务进程只有一个(例如业务进程1),则服务器中用于线程间通信的共享线性表只有一个,例如第一共享线性表。转发进程中的转发线程从上行队列中获取得到报文1的结果报文(即报文1’)之后,则可通过报文1’中携带的报文ID(即SNID1)从上述第一共享线性表中查找SNID1对应的存储单元(例如第一存储单元),并将报文1’存储至第一存储单元中。
可选的,若服务器中需要通过硬件加速器进行硬件加速处理的业务进程多于一个,例如除了业务进程1之后还有业务进程2、业务进程3等,则服务器中用于线程间通信的共享线性表也多于一个,例如除了第一共享线性表之外还有业务进程1对应的第二共享线性表、业务进程3对应的第三共享线性表等。转发进程中的转发线程从上行队列中获取得到报文1’之后,可根据报文1’中携带的进程ID(例如第一进程ID),找到业务进程1对应的共享线性表,即第一共享线性表。转发线程根据第一进程ID找到第一共享线性表之后,则可根据报文1’中携带的报文ID(即SNID1)从第一共享线性表中查找得到SNID1对应的第一存储单元,并将报文1’存储至第一存储单元中。
可选的,上述一个或者多个共享线性表中,各个共享线性表均包括多个存储单元,并且每个存储单元的结构均相同。为方便描述,下面将以第一共享线性表为例,对各个共享线性表中的存储单元的结构进行简单介绍。
在一种可行的实施方式中,第一共享线性表中包括的存储单元的个数可设为L,则L为大于1的整数。其中,每个存储单元至少包括一个存储单元索引和一个数据访问状态标记。上述数据访问状态标记用于标记存储单元的数据存储状态,上述存储单元的数据存储状态包括空闲、正在写、写完成、正在读以及读完成等。参见图7,图7是本申请实施例提供的共享线性表的结构示意图。如图7所示,任一存储单元的存储单元索引可为该存储单元在共享线性表中的位置。例如,第一共享线性表中包括L个存储单元,各个存储单元按照线性排列,并且每个存储单元分别对应一个编号,例如存储单元0、存储单元1、存储单元2、…、存储单元L-1等。其中,第一共享线性表中的第一个存储单元的存储单元索引可为0,第一共享线性表中最后一个存储单元的存储单元索引可为L-1等,以此类推。
可选的,如图7,共享线性表中每个存储单元(以存储单元3为例)可由管理头和任意大小的数据块组成,其中管理头由互斥标志(MutexFlag)字段、报文ID字段、重试轮次(RetryCnt)字段以及保留域字段组成。其中,上述互斥标志字段、报文ID字段、重试轮次字段以及保留域字段可简单介绍如下:
(1)互斥标志字段
可选的,该字段的字段名称可由MutexFlag表示。该字段可包括4个字节。互斥标志也可称为存储单元的数据访问状态标记,用于标记存储单元的数据存储状态。其中,上述存储单元的数据存储状态包括空闲、正在写、写完成、正在读或者读完成。上述存储单元的数据存储状态可由状态机的五种状态组成,其中,状态机的五种状态的变更顺序如下1~5,并且状态机的这五种状态的变更必须按照如下1~5执行,由此也可保证在多业务线程并发读写该存储单元时,同一时刻只有一个业务线程可用对该存储单元的内容进行读或者写的操作。
状态机的状态的变更顺序为:1空闲->2正在写->3写完成->4正在读->5读完成。
可选的,上述存储单元的数据存储状态可分别由互斥标志1、2、3、4和5表示,其中,1表示空闲,2表示正在写,3表示写完成,4表示正在读,5表示读完成。其中,表示读完成的状态值与表示空闲的状态值也可相同,即状态机的状态变更至读完成时也即回到空闲状态。
(2)报文ID字段
可选的,该字段的字段名称可用SIND表示。其中,报文ID字段可包括4个字节,报文ID字段用于存储写入到该存储单元的结果报文的SNID。
(3)重试轮次字段
其中,重试轮次字段也可包括4个字节,该字段的字段名称可由RetryCnt表示。转发线程在将任一业务线程的结果报文写入该存储单元时,如果经过多次尝试,该存储单元的数据存储状态仍然无法满足写入条件,则记为该存储单元的一次重试轮次。
(4)保留域
可选的,保留域的字段名称可用Resv表示。其中,上述保留域也可包括4个字节,用于将存储单元的管理头的字节总数填充至16字节。可选的,该保留域中填充的内容无要求,具体可根据实际应用场景需求确定,在此不做限制。
在本申请实施例中,转发线程和业务线程之间可使用共享线性表来实现线程间的通信,其中转发线程对共享线性表的存储单元进行写数据操作和/或对存储单元中存储的内容进行读操作,业务线程对共享线性表的存储单元中存储的内容进行读操作。
本申请实施例提供的共享线性表可应用于多线程并发场景中的线程间通信。在现有技术方案中,存储单元的读操作或者写操作的控制是通过自旋锁(spinlock)实现,通过自旋锁实现线程间的可靠通信。即在转发线程对某一存储单元进行写数据操作时,转发线程获取到自旋锁才能往线性表的存储单元写入数据。当任一业务线程或者转发线程想要从线性表的存储单元中读取数据时,只有获取到自旋锁的业务线程或者转发线程才能从线性表的存储单元中获取数据。然而,由于自旋锁的性能较差,特别是在多线程并发多的场景,和/或多线程之间冲突大的场景,采用自旋锁实现线性表的存储单元的读操作和/或写操作的性能会急剧下降,适用性低。
在本申请实施例中,业务线程或者转发线程可采用原子比较设置指令和状态机结合的方式来实现对互斥标志的免锁操作,实现线程间的高可靠性、高性能通信。
其中,上述原子比较设置指令的原理在X86***上可表示如下;
1、函数接口:AtomicCmpset(*mem,oldvalue,newvalue)
其中,参数说明:*mem为读写的内存指针,*mem指向读写的存储单元;oldvalue为需要比较的值;newvalue为比较相等后需要设置的值。
其中,由状态机的状态表示oldvalue和newvalue时,oldvalue可为状态机的某一个状态i(例如空闲)对应的状态值,newvalue可为状态机的下一个状态对应的状态值。例如,当上述状态i为空闲时,oldvalue为空闲对应的状态值,newvalue则为空闲的下一个状态(即正在写)的状态值。
原子比较设置指令的执行原理为,首先通过LOCK指令锁住中央处理器(centralprocessing unit,CPU)总线,然后判断*mem指向的存储单元的数据存储状态的状态值是否等于oldvalue;
情况1:如果*mem指向的存储单元的数据存储状态的状态值等于oldvalue,则将该存储单元的数据存储状态值设置为newvalue,解锁CPU总线,然后函数返回oldvalue;
情况2:如果*mem指向的存储单元的数据存储状态的状态值不等于oldvalue,则解锁CPU总线,函数返回当前*mem指向的存储单元的数据存储状态的状态值。
2、上述原子比较设置指令的函数伪码如下:
在一种可行的实施方式中,服务器通过转发线程获取得到硬件加速器反馈的结果报文(例如报文1’),并根据报文1’中携带的第一进程ID查找得到第一共享线性表之后,还可根据报文1’中携带的报文ID(例如SNID1)和第一共享线性表的长度确定第一存储单元的存储单元索引。其中,共享线性表中任一存储单元索引的确定方式为:存储单元索引=报文ID%共享线性表的长度。例如,根据报文1’中携带的报文ID确定第一存储单元时,报文1’中包括的报文ID为SNID1,第一共享线性表的长度为L,则第一存储单元的存储单元索引(设为第一索引)则为SNID1%L。
S4,服务器通过转发线程将第一结果报文存储至第一存储单元。
服务器通过转发线程确定了第一存储单元之后,则可将报文1’写入第一存储单元。其中,服务器通过转发线程将报文1’写入第一存储单元时,转发线程可根据第一存储单元的管理头中存储的互斥标志确定第一存储单元的数据存储状态,并根据第一存储单元的数据存储状态的不同而执行不同的操作。其中,转发线程根据第一存储单元的数据存储状态的不同而执行不同的操作时可包括如下场景一至场景四的四种不同的场景。
下面将以报文1’写入第一存储单元为例,对各个场景下转发线程所执行的操作进行说明。
场景一:第一存储单元的数据存储状态为空闲。
在场景一中,转发线程根据报文1’中携带的SNID确定出第一存储单元之后,则可根据第一存储单元的管理头中存储的互斥标志确定第一存储单元的数据存储状态是否为空闲。
可选的,为了防止多线程并发的应用场景中,存在其他线程和转发线程同时发起对第一存储单元的写操作,在本申请实施例中,转发线程还可通过原子比较设置指令进一步确定第一存储单元的数据存储状态是否为空。如果转发线程通过原子比较设置指令确定第一存储状态的数据存储状态为空,即此时第一存储单元的管理头中的互斥标志为1,转发线程则可直接将报文1’写入第一存储单元,并将第一存储单元的数据存储状态设置为正在写,即将第一存储单元的管理头中的互斥标志由1变更为2。此时,第一存储单元的数据存储状态可有空闲变更为正在写。当报文1’写入第一存储单元完成时,转发线程可将第一存储单元的数据存储状态设置为写完成,此时,第一存储单元的数据存储状态可由正在写变更为写完成,即第一存储单元的管理头中的互斥标志由2变更为3。
场景二:第一存储单元的数据存储状态为正在读。
在本申请实施例中,场景二所描述的可为业务线程正常自动回收内存资源的场景。
在该场景中,在转发线程接收到报文1’之前,第一存储单元中存储有其他业务线程(例如业务线程x)的报文,此时第一存储单元的数据存储状态为写完成,即第存储单元中的互斥标志位3。进一步的,若在转发线程接收到硬件加速器反馈的报文1’之前,业务线程x已经发起了对第一存储单元中存储的报文的读取操作,业务线程x将第一存储单元的数据存储状态设置为正在读,则此时第一存储单元的数据存储状态由写完成变更为正在读,即第一存储单元的管理头中的互斥标志由3变更为4。当转发线程接收到硬件加速器反馈的报文1’并发起写入报文的操作时,转发线程根据第一存储单元的管理头存储的互斥标志确定第一存储单元的数据存储状态为正在读,此时转发线程需要等待业务线程x读取报文完成之后才能对第一存储单元执行写入操作。
在本申请实施例中,转发线程在等待业务线程x读取报文完成之后,可多次尝试写入,因此,在本申请实施例中可设置参数——本轮重试次数Cnt,Cnt可用于对转发线程尝试往第一存储单元中写入报文的尝试次数的计数。当业务线程x读取报文完成时,业务线程x可将第一存储单元的数据存储状态设置读完成,即此时第一存储单元的管理头的互斥标志可由4变更为5,即第一存储单元的数据存储状态为空闲。当转发线程检测得到第一存储单元的数据存储状态为读完成时,则可采用如上述场景一的实现方式将报文1’写入第一存储单元,具体可参见上述场景一,在此不再赘述。
场景三:第一存储单元的数据存储状态为正在读,并且正在读的持续时间大于或者等于预设时间阈值。
在本申请实施例中,场景三可对应于业务线程从共享线性表中读取报文失败的场景。
如上述场景二所描述的实现方式,在转发线程接收到报文1’之前,第一存储单元中存储有其他业务线程(例如业务线程x)的报文,此时第一存储单元的数据存储状态为写完成。进一步的,若在转发线程接收到硬件加速器反馈的报文1’之前,业务线程x已经发起了对第一存储单元中存储的报文的读取操作,业务线程x将第一存储单元的数据存储状态设置为正在读,则此时第一存储单元的数据存储状态由写完成变更为正在读。当转发线程接收到硬件加速器反馈的报文1’并发起写入报文的操作时,转发线程根据第一存储单元的管理头存储的互斥标志确定第一存储单元的数据存储状态为正在读,此时转发线程需要等待业务线程x读取报文完成之后才能对第一存储单元执行写入操作。然而,若在业务线程x读取报文完成之前,业务线程x发生了复位等异常状况时,业务线程x被强制退出,此时第一存储单元的数据存储状态则将处于正在读状态。此时转发线程会重复上述场景二中的处理,随着第一存储单元正在读的状态持续时间的加长,上述Cnt的计数会不断增加,转发线程无法将报文1’写入第一存储单元。
在本申请实施例中,为了防止转发线程无限制等待下去,设置了Cnt的阈值,即转发线程本轮尝试写入的重试次数上限。例如,当转发线程在报文1’到来之前接收到报文x,并在尝试将报文x写入第一存储单元时,多次尝试均无法写入。当转发线程尝试写入的本轮重试次数Cnt大于该阈值时,可确定第一存储单元的数据存储状态为正在读的持续时间大于或者等于预设时间阈值,此时转发线程需要丢弃报文x,例如将报文x存储至共享资源回收队列,并记为第一存储单元的一次重试轮次。可选的,转发线程可将第一存储单元中的重试轮次设置为1,用于表示第一存储单元中有残留报文。当转发线程接收到报文1’并尝试将报文1’写入第一存储单元时,查询得到第一存储单元的管理头中重试轮次为1,则可确定第一存储单元中有存在残留报文,例如业务线程x从第一存储单元中读取数据失败时残留下来的报文。当转发线程确定第一存储单元中有残留报文时,转发线程可将第一存储单元中存储的残留报文读出并存储至业务进程1对应的第一共享资源回收队列并将第一存储单元中的重试轮次清零,进而可将报文1’写入第一存储单元。其中,转发线程将报文1’写入第一存储单元的实现方式可参见上述场景一,在此不再赘述。
场景四:第一存储单元的数据存储状态为写完成。
在本申请实施例中,场景四可为转发线程正常回收内存资源的场景。
在该场景中,当转发线程接收到报文1’并确定出第一存储单元之后,根据第一存储单元中的数据存储状态确定第一存储单元的数据存储状态为写完成。为了防止转发线程和其他线程(例如业务线程x)同时发起对第一存储单元的读操作,在本申请实施例中,当转发线程确定第一存储单元的数据存储状态为写完成之后,转发线程还可通过原子比较设置指令进一步确定第一存储单元的数据存储状态为写完成。当转发线程通过原子比较设置指令确定第一存储单元的数据存储状态为写完成,则可确定第一存储单元中存在残留报文,此时转发线程可将第一存储单元中的残留报文读出并存储至业务进程1对应的第一共享资源回收队列,进而可通过业务进程1中部署的回收线程将该残留报文从第一共享资源回收队列中读出,并将业务进程1所占用的内存块(例如内存块1)释放回业务进程1的内存池中,以完成第一共享线性表的内存资源的回收。转发线程将第一存储单元中的残留报文读出并存储至第一共享资源回收队列之后,则可将报文1’写入第一存储单元,具体可参见上述场景一中相应的实现方式,在此不再赘述。
S5,服务器通过第一业务线程根据第一报文ID查找第一存储单元,从第一存储单元中读取第一结果报文,将第一结果报文中携带的第一报文ID从第一缓存队列中删除。
在一种可行的实施方式中,在业务线程正常自动回收内存资源的场景中,服务器可通过业务进程1的业务线程周期性轮询第一共享线性表,确定第一共享线性表中是否有其对应的结果报文。服务器可通过业务进程1的业务线程从第一共享线性表读取该业务线程的结果报文,以实现第一共享线性表中存储的结果报文的自动回收。
为方便描述,下面将以业务线程1对其发送给硬件加速器的报文(即报文1)的结果报文(即报文1’)的自动回收为例进行说明。
可选的,业务线程1可从其专属的SNID缓存队列(即第一缓存队列)中获取已发送给硬件加速器的报文的报文ID,例如,报文1的报文ID(即SNID1)。业务线程1可根据上述存储单元索引的确定方式:存储单元索引=报文ID%共享线性表的长度,确定SNID1对应的存储单元索引(设为第二索引)。第一业务线程可根据第二索引从第一共享线性表中查找第一存储单元,并从第一存储单元中读取报文1的结果报文(即报文1’)。在本申请实施例中,业务线程1根据第一缓存队列中存储的SNID1和第一共享线性表的长度确定的第二索引,和转发线程从报文1’中获取得到SNID1之后,根据SNID1和第一共享线性表的长度确定的第一索引相同,并且均指向第一共享线性表中的同一个存储单元,即第一存储单元。
可选的,业务线程1可根据第一存储单元的管理头中存储的报文ID确定当前第一存储单元中存储的报文是否为报文1’,并根据判断结果执行如下数据处理过程一或数据处理过程二:
数据处理过程一:
当业务线程1确定第一存储单元的数据存储状态为写完成,并且第一存储单元中存储的报文ID与SNID1相同,则可确定第一存储单元中存储的报文为本业务线程发送给硬件加速器进行处理的结果报文,即第一存储单元中存储的报文为报文1’。此时,业务线程1可获取该存储单元中存储的报文1’并发送给其他业务模块进行后续处理。此外,业务线程1还可将SNID1从第一缓存队列中删除,以释放SNID1在第一缓存队列中所占用的缓存队列资源。
数据处理过程二:
当业务线程1确定第一存储单元的数据存储状态为写完成,并且第一存储单元中存储的报文ID与SNID1不相同,此时可确定第一存储单元中存储的报文是在此之前其他业务线程复位后留下的残留报文,而非本业务线程发送给硬件加速器进行处理的结果报文。此时,第一业务线程可读取第一存储单元中存储的残留报文,但不提交给业务模块处理,而是直接存储至第一业务进程的内存池,实现该残留报文所占用的内存资源的自动回收。
S6,当确定第一业务线程从第一存储单元中读取第一结果报文失败时,终端通过转发进程将第一结果报文从第一存储单元中读出并存储至第一共享资源回收队列,并通过第一业务进程的资源回收线程实现第一共享资源回收队列中存储的结果报文的回收。
可选的,在上述业务线程1执行的数据处理过程一中,如果业务线程1在读取第一存储单元中存储的报文1’的过程中,在报文1’读取完成之前,业务线程1被复位了,则报文1’将成为第一共享线性表1的第一存储单元的残留报文。
在本申请实施例中,服务器可通过转发线程周期性轮询第一共享线性表,通过转发线程将残留在第一存储单元中的报文1’回收至第一共享资源回收队列。进而可通过业务进程1中部署的资源回收线程将报文1’从第一共享资源回收队列中读出并存储至业务进程1的内存池,实现报文1’所占用的内存资源回收。
可选的,服务器通过转发线程将报文1’在第一共享线性表中所占用的内存资源回收之后,还可通过业务进程1中的资源回收线程将业务线程1的报文ID(即SNID1)从第一缓存队列中删除,以释放SNID1在第一缓存队列中所占用的缓存队列资源。
可选的,如上述数据处理过程一中所描述的场景,如果报文1’成为存储在第一存储单元中的残留报文,服务器也可通过业务线程1之外的其他任一业务线程,按照上述业务线程1所执行的操作将报文1’从第一存储单元中读出并存储至第一业务进程的内存池,实现内存资源的自动回收,在此不再赘述。同理,服务器还可通过业务进程1中的资源回收线程将业务线程1的报文ID(即SNID1)从第一缓存队列中删除,以释放SNID1在第一缓存队列中所占用的缓存队列资源。
下面将以一个简单的示例,共享线性表中存储的结果报文的回收方式进行简单介绍。
可选的,假设第一共享线性表的长度为16000个单元。在某一时刻,业务进程1中的业务线程1发送了报文ID为SNID=3的报文(假设为报文A)给硬件加速器。当硬件加速器还在处理报文A的过程中,业务线程1出现了异常复位,则报文A的结果报文无法返回给业务线程1而残留第一共享线性表中。此时,由报文A的报文ID(SNID=3)可确定报文A存储于第一共享线性表中存储单元索引为3(3%16000=3)的存储单元(设为存储单元3)中。报文的结果报文所占用的内存资源需要回收。
在某一时刻,业务进程1中的业务线程2发送了报文ID为SNID=4的报文(假设为报文B)给硬件加速器。硬件加速器处理完成后,业务线程2成功从第一共享线性表中读取得到报文B的结果报文,实现了报文B的硬件加速的同时也完成了内存资源回收。
在某一时刻,业务进程1中的业务线程3发送了报文ID为SNID=5~16003的报文给硬件加速器,硬件加速器处理后都存储至第一共享线性表中,等待业务线程3从第一共享线性表中读取。此时,业务线程3从第一共享线性表中获取报文ID为SNID=5~16002各个报文的结果报文时,与业务线程2的情况相同,在此不再赘述。然而,业务线程3从第一共享线性IAO中获取报文ID为SNID=16003的报文(例如报文3)对应的结果报文时,根据SNID=3计算得到的存储单元索引为3,即存储单元3。业务线程3从存储单元3的管理头中读取的报文ID为SNID=3,并非16003,此时可确定存储单元3内还残留着业务线程1复位后未被回收的结果报文。此时,业务线程1的结果报文的回收方式可包括如下回收方式一或者回收方式二两种情况:
回收方式一:
当报文ID为SNID=16003的报文3在硬件加速器中处理时间较长,业务线程3此时去查看第一共享线性表中是否有结果报文。如果业务线程3发现第一共享线性表中有结果报文,但是该结果报文的报文ID为SNID=3,并非自己发送的SNID=16003的报文对应的结果报文,则业务线程3将该残留报文读取后不发送给业务模块。业务线程3直接调用释放内存接口将该残留报文存储至内存池,并将该报文占用的内存块释放回内存池,将该报文的SNID从其存储的SNID缓存队列中删除,以实现内存自动回收。
回收方式二:
当报文ID为SNID=16003的报文3在硬件加速器中处理很快,在业务线程3开始读取结果报文之前,报文3已经处理完成并得到其结果报文(报文3’),并且转发线程开始将报文3’写入第一共享线性表。此时,转发线程发现第一共享线性表中存储单元3内存在报文ID为SNID=3的结果报文,则转发线程将存储单元3中存储的残留报文读出并存储至第一共享资源回收队列,并通过业务进程1的资源回收线程将该残留报文从第一共享资源回收队列中读出并存储至内存池,并将该报文占用的内存块释放回内存池,将该报文的SNID从其存储的SNID缓存队列中删除,以实现内存自动回收。
在本申请实施例中,可针对每个业务进程部署一个共享线性表,通过共享线性表为业务进程和转发进程提供简单可靠的线程间通信机制,可减少随着业务进程内的业务线程的数量的增加所带来的资源消耗,提高业务线程的业务数据的硬件加速可靠性。在本申请实施例中,可通过各个业务线程内部署的SNID缓存队列记录发送给硬件加速器的报文的ID,以供业务线程按照SNID缓存队列中存储的SNID快速并精确的从共享线性表中查询并读取各个报文对应的结果报文,实现结果报文的快速回收,并实现了结果报文的保序功能,结果报文的数据处理效率更高。在本申请实施例中,可通过每个业务进程中部署的共享资源回收队列存储共享线性表中残留的结果报文,并通过资源回收线程实现对共享资源回收队列中存储的残留数据的回收,降低了硬件加速的内存资源回收的实现难度,提高硬件加速的数据处理过程中内存资源回收的效率和可靠性,适用性更高。
参见图8,图8是本申请实施例提供的数据处理装置的结构示意图。
本申请实施例提供的数据处理装置包括:
收发单元81,用于通过第一业务进程的第一业务线程将第一报文发送给数据处理设备,该第一报文中包括第一报文标识ID和第一业务数据。
处理单元82,用于将收发单元81发送给数据处理设备的第一报文的第一报文ID记录于第一业务线程中的第一缓存队列。
上述收发单元81,还用于通过转发进程获取数据处理设备反馈的第一结果报文,该第一结果报文中包括第一报文ID和第一业务数据经数据处理设备处理得到的第二业务数据。
上述处理单元82,还用于通过转发进程根据第一报文ID从第一共享线性表中确定出第一存储单元,并将第一结果报文存储至第一存储单元。其中,第一共享线性表用于存储数据处理设备反馈的第一业务进程的各业务线程的结果报文。
上述处理单元82,还用于通过第一业务线程根据第一缓存队列中记录的第一报文ID查找第一存储单元,从第一存储单元中读取第一结果报文,将第一结果报文中携带的第一报文ID从第一缓存队列中删除。
在一种可能的实施方式中,上述处理单元82,还用于当确定第一业务线程从第一存储单元中读取第一结果报文失败时,通过转发进程将第一结果报文从第一存储单元中读出并存储至第一共享资源回收队列。
其中,上述第一共享资源回收队列用于存储转发进程从第一共享线性表中读出的结果报文。
上述处理单元82,还用于通过第一业务进程的资源回收线程从第一共享资源回收队列中读取第一结果报文,并将第一结果报文中携带的第一报文ID从第一缓存队列中删除。
在一种可能的实施方式中,上述处理单元82,还用于通过第一业务进程的第一业务线程从第一业务进程的报文ID分配设备获取第一报文ID,并根据第一报文ID和第一业务线程的第一业务数据得到第一报文。其中,上述第一报文ID与报文ID分配设备分配给第一业务进程的其他报文的报文ID均各不相同。
在一种可能的实施方式中,上述第一结果报文中还包括第一业务进程的第一进程ID。上述处理单元82,还用于通过转发进程获取第一结果报文中携带的第一业务进程的第一进程ID,并根据第一进程ID查找第一业务进程对应的第一共享线性表。
在一种可能的实施方式中,上述第一共享线性表中包括L个存储单元,L为大于或者等于1的整数。其中,每个存储单元至少包括存储单元索引和数据访问状态标记,上述数据访问状态标记用于标记存储单元的数据存储状态。其中,上述存储单元的数据存储状态包括空闲、正在写、写完成、正在读以及读完成中的一种。
在一种可能的实施方式中,上述处理单元82,用于通过转发进程根据第一报文ID和共享线性表的存储单元个数L确定出第一索引,并将共享线性表中存储单元索引与第一索引相同的存储单元确定为第一存储单元。
在一种可能的实施方式中,上述处理单元82,用于通过转发进程确定第一存储单元的数据存储状态为空闲和/或读完成,则通过转发进程将第一结果报文写入第一存储单元。
在一种可能的实施方式中,上述处理单元82,用于在通过转发进程确定第一存储单元的数据存储状态为写完成时,通过转发进程将第一存储单元中存储的第二结果报文读出,并将第一结果报文写入第一存储单元。可以理解,这里第二结果报文为数据处理设备反馈的第二报文的结果报文,第二报文为第一业务进程通过第二业务线程发送给数据处理设备的报文。
在一种可能的实施方式中,上述第二结果报文中包括第二报文ID,该第二报文ID记录于第二业务线程中的第二缓存队列。上述处理单元82,用于通过转发进程将第二结果报文存储至第一共享资源回收队列,通过资源回收线程从第一共享资源回收队列中读取第二结果报文并存储至第一业务进程的内存池,并将第二报文ID从第二缓存队列中删除。这里,第一业务进程的内存池用于存储从第一共享线性表中回收的第一业务进程的各业务线程的结果报文。
在一种可能的实施方式中,上述处理单元82,用于在通过转发进程确定第一存储单元的数据存储状态为正在读,并且正在读的持续时间大于或者等于预设时间阈值时,确定第一业务线程从第一存储单元中读取第一结果报文失败,并通过转发进程将第一结果报文从第一存储单元中读出并存储至第一共享资源回收队列。
在一种可能的实施方式中,上述处理单元82用于:
通过第一业务线程从第一缓存队列中读取第一报文ID,并根据第一报文ID和共享线性表的存储单元个数L确定出第二索引。通过第一业务线程从共享线性表中查找存储单元索引与第二索引相同的上述第一存储单元,若确定上述第一存储单元的数据存储状态为写完成并且第一存储单元中存储的报文ID与第一报文ID相同,则确定第一存储单元中存储的报文为第一结果报文,并从第一存储单元中读取第一结果报文。
在一种可能的实施方式中,上述处理单元82,还用于在确定第一存储单元的数据存储状态为写完成,并且第一存储单元中存储的报文ID与第一报文ID不相同时,确定第一存储单元中存储的报文为第一结果报文之外的第二结果报文,并将第二结果报文从第一存储单元中读出并存储至第一业务进程的内存池。其中,可以理解,第一业务进程的内存池用于存储从第一共享线性表中回收的第一业务进程的各业务线程的结果报文。
具体实现中,本申请实施例提供的数据处理装置可通过其包括的收发单元和处理单元执行第一方面提供的数据处理方法,具体可参见上述实施例中终端所执行的实现方式,在此不再赘述。因此,本申请实施例提供的数据处理装置也能实现第一方面提供的数据处理方法所具备的有益效果。
请参见图9,图9是本申请实施例提供的一种通信设备90的结构示意图。
如图9所示,本申请实施例提供的通信设备90包括处理器901、存储器902、收发器903和总线***904。其中,上述处理器901、存储器902和收发器903通过总线***904连接。
上述存储器902用于存放程序。具体地,程序可以包括程序代码,程序代码包括计算机操作指令。存储器902包括但不限于是随机存储记忆体(random access memory,RAM)、只读存储器(read-only memory,ROM)、可擦除可编程只读存储器(erasable programmableread only memory,EPROM)、或便携式只读存储器(compact disc read-only memory,CD-ROM)。图9中仅示出了一个存储器,当然,存储器也可以根据需要,设置为多个。
存储器902也可以是处理器901中的存储器,在此不做限制。
存储器902存储了如下的元素,可执行模块或者数据结构,或者它们的子集,或者它们的扩展集:
操作指令:包括各种操作指令,用于实现各种操作。
操作***:包括各种***程序,用于实现各种基础业务以及处理基于硬件的任务。
上述处理器901控制通信设备90的操作,处理器901可以是一个或多个中央处理器(central processing unit,CPU)。在处理器901是一个CPU的情况下,该CPU可以是单核CPU,也可以是多核CPU。
具体的应用中,通信设备90的各个组件通过总线***904耦合在一起,其中总线***904除包括数据总线之外,还可以包括电源总线、控制总线和状态信号总线等。但是为了清楚说明起见,在图9中将各种总线都标为总线***904。为便于表示,图9中仅是示意性画出。
本申请实施例提供的上述各个实施例揭示的数据处理方法可以应用于处理器901中,或者由处理器901实现。处理器901可能是一种集成电路芯片,具有信号的处理能力。
在实现过程中,上述方法的各步骤可以通过处理器901中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器901可以是通用处理器、数字信号处理器(digitalsignal processing,DSP)、专用集成电路(application specific integrated circuit,ASIC)、现场可编程门阵列(field-programmable gate array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件,可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。
通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本申请实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器902,处理器901读取存储器902中的信息,结合其硬件执行上述各个实施例所描述数据处理方法步骤。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,该流程可以由计算机程序来指令相关的硬件完成,该程序可存储于计算机可读取存储介质中,该程序在执行时,可包括如上述各方法实施例的流程。而前述的存储介质包括:ROM或随机存储记忆体RAM、磁碟或者光盘等各种可存储程序代码的介质。
Claims (25)
1.一种数据处理方法,其特征在于,包括:
终端通过第一业务进程的第一业务线程将第一报文发送给数据处理设备,所述第一报文中包括第一报文标识ID和第一业务数据,并将所述第一报文ID记录于所述第一业务线程中的第一缓存队列;
所述终端通过转发进程获取所述数据处理设备反馈的第一结果报文,所述第一结果报文中包括所述第一报文ID和所述第一业务数据经所述数据处理设备处理得到的第二业务数据;
所述终端通过所述转发进程根据所述第一报文ID从第一共享线性表中确定出第一存储单元,并将所述第一结果报文存储至所述第一存储单元,其中,所述第一共享线性表用于存储所述数据处理设备反馈的所述第一业务进程的各业务线程的结果报文;
所述终端通过所述第一业务线程根据所述第一缓存队列中记录的所述第一报文ID查找所述第一存储单元,从所述第一存储单元中读取所述第一结果报文,将所述第一结果报文中携带的所述第一报文ID从所述第一缓存队列中删除。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
当确定所述第一业务线程从所述第一存储单元中读取所述第一结果报文失败时,所述终端通过所述转发进程将所述第一结果报文从所述第一存储单元中读出并存储至第一共享资源回收队列,其中,所述第一共享资源回收队列用于存储所述转发进程从所述第一共享线性表中读出的结果报文;
所述终端通过所述第一业务进程的资源回收线程从所述第一共享资源回收队列中读取所述第一结果报文,并将所述第一结果报文中携带的所述第一报文ID从所述第一缓存队列中删除。
3.根据权利要求1或2所述的方法,其特征在于,所述终端通过第一业务进程的第一业务线程将第一报文发送给数据处理设备之前,所述方法还包括:
所述终端通过第一业务进程的第一业务线程从所述第一业务进程的报文ID分配设备获取第一报文ID,并根据所述第一报文ID和所述第一业务线程的第一业务数据得到第一报文;
其中,所述第一报文ID与所述报文ID分配设备分配给所述第一业务进程的其他报文的报文ID均各不相同。
4.根据权利要求1-3任一项所述的方法,其特征在于,所述第一结果报文中还包括所述第一业务进程的第一进程ID;
所述终端通过转发进程获取所述数据处理设备反馈的第一结果报文之后,所述方法还包括:
所述终端通过所述转发进程获取所述第一结果报文中携带的所述第一业务进程的第一进程ID,并根据所述第一进程ID查找所述第一业务进程对应的所述第一共享线性表。
5.根据权利要求4所述的方法,其特征在于,所述第一共享线性表中包括L个存储单元,L为大于或者等于1的整数;
其中,每个所述存储单元至少包括存储单元索引和数据访问状态标记;
所述数据访问状态标记用于标记所述存储单元的数据存储状态;
其中,所述存储单元的数据存储状态包括空闲、正在写、写完成、正在读以及读完成中的一种。
6.根据权利要求5所述的方法,其特征在于,所述终端通过所述转发进程根据所述第一报文ID从第一共享线性表中确定出第一存储单元包括:
所述终端通过所述转发进程根据所述第一报文ID和所述共享线性表的存储单元个数L确定出第一索引,并将所述共享线性表中存储单元索引与所述第一索引相同的存储单元确定为第一存储单元。
7.根据权利要求5或6所述的方法,其特征在于,所述将所述第一结果报文存储至所述第一存储单元包括:
若所述终端通过所述转发进程确定所述第一存储单元的数据存储状态为空闲和/或读完成,则通过所述转发进程将所述第一结果报文写入所述第一存储单元。
8.根据权利要求5或6所述的方法,其特征在于,所述将所述第一结果报文存储至所述第一存储单元包括:
若所述终端通过所述转发进程确定所述第一存储单元的数据存储状态为写完成,则通过所述转发进程将所述第一存储单元中存储的第二结果报文读出,并将所述第一结果报文写入所述第一存储单元;
其中,所述第二结果报文为所述数据处理设备反馈的第二报文的结果报文,所述第二报文为所述第一业务进程通过第二业务线程发送给所述数据处理设备的报文。
9.根据权利要求8所述的方法,其特征在于,所述第二结果报文中包括第二报文ID,所述第二报文ID记录于所述第二业务线程中的第二缓存队列;
所述通过所述转发进程将所述第一存储单元中存储的第二结果报文读出之后,所述方法还包括:
所述终端通过所述转发进程将所述第二结果报文存储至第一共享资源回收队列;
所述终端通过所述资源回收线程从所述第一共享资源回收队列中读取所述第二结果报文并存储至所述第一业务进程的内存池,并将所述第二报文ID从所述第二缓存队列中删除;
其中,所述第一业务进程的内存池用于存储从所述第一共享线性表中回收的所述第一业务进程的各业务线程的结果报文。
10.根据权利要求5或6所述的方法,其特征在于,所述当所述终端通过所述转发进程确定所述第一业务线程从所述第一存储单元中读取所述第一结果报文失败时,将所述第一结果报文从所述第一存储单元中读出并存储至第一共享资源回收队列包括:
若所述终端通过所述转发进程确定所述第一存储单元的数据存储状态为正在读,并且正在读的持续时间大于或者等于预设时间阈值,则确定所述第一业务线程从所述第一存储单元中读取所述第一结果报文失败;
所述终端通过所述转发进程将所述第一结果报文从所述第一存储单元中读出并存储至第一共享资源回收队列。
11.根据权利要求5所述的方法,其特征在于,所述终端通过所述第一业务线程根据所述第一缓存队列中记录的所述第一报文ID查找所述第一存储单元,从所述第一存储单元中读取所述第一结果报文包括:
所述终端通过所述第一业务线程从所述第一缓存队列中读取所述第一报文ID,并根据所述第一报文ID和所述共享线性表的存储单元个数L确定出第二索引;
通过所述第一业务线程从所述共享线性表中查找存储单元索引与所述第二索引相同的所述第一存储单元;
若确定所述第一存储单元的数据存储状态为写完成并且所述第一存储单元中存储的报文ID与所述第一报文ID相同,则确定所述第一存储单元中存储的报文为所述第一结果报文,并从所述第一存储单元中读取所述第一结果报文。
12.根据权利要求11所述的方法,其特征在于,所述方法还包括:
若确定所述第一存储单元的数据存储状态为写完成,并且所述第一存储单元中存储的报文ID与所述第一报文ID不相同,则确定所述第一存储单元中存储的报文为所述第一结果报文之外的第二结果报文,并将所述第二结果报文从所述第一存储单元中读出并存储至所述第一业务进程的内存池;
其中,所述第一业务进程的内存池用于存储从所述第一共享线性表中回收的所述第一业务进程的各业务线程的结果报文。
13.一种终端,其特征在于,包括:存储器、收发器和处理器;
所述存储器、所述收发器和所述处理器通过总线连接;
所述存储器用于存储一组程序代码;
所述收发器和处理器用于调用所述存储器中存储的程序代码执行如下操作:
所述收发器,用于通过第一业务进程的第一业务线程将第一报文发送给数据处理设备,所述第一报文中包括第一报文标识ID和第一业务数据;
所述处理器,用于将所述收发器发送给所述数据处理设备的所述第一报文的所述第一报文ID记录于所述第一业务线程中的第一缓存队列;
所述收发器,还用于通过转发进程获取所述数据处理设备反馈的第一结果报文,所述第一结果报文中包括所述第一报文ID和所述第一业务数据经所述数据处理设备处理得到的第二业务数据;
所述处理器,还用于通过所述转发进程根据所述收发器获取的所述第一报文ID从第一共享线性表中确定出第一存储单元,并将所述第一结果报文存储至所述第一存储单元,其中,所述第一共享线性表用于存储所述数据处理设备反馈的所述第一业务进程的各业务线程的结果报文;
所述处理器,还用于通过所述第一业务线程根据所述第一缓存队列中记录的所述第一报文ID查找所述第一存储单元,从所述第一存储单元中读取所述第一结果报文,将所述第一结果报文中携带的所述第一报文ID从所述第一缓存队列中删除。
14.根据权利要求13所述的终端,其特征在于,所述处理器还用于:
当确定所述第一业务线程从所述第一存储单元中读取所述第一结果报文失败时,通过所述转发进程将所述第一结果报文从所述第一存储单元中读出并存储至第一共享资源回收队列,其中,所述第一共享资源回收队列用于存储所述转发线程从所述第一共享线性表中读出的结果报文;
通过所述第一业务进程的资源回收线程从所述第一共享资源回收队列中读取所述第一结果报文,并将所述第一结果报文中携带的所述第一报文ID从所述第一缓存队列中删除。
15.根据权利要求13或14所述的终端,其特征在于,所述处理器还用于:
通过第一业务进程的第一业务线程从所述第一业务进程的报文ID分配设备获取第一报文ID,并根据所述第一报文ID和所述第一业务线程的第一业务数据得到第一报文;
其中,所述第一报文ID与所述报文ID分配设备分配给所述第一业务进程的其他报文的报文ID均各不相同。
16.根据权利要求13-15任一项所述的终端,其特征在于,所述第一结果报文中还包括所述第一业务进程的第一进程ID;
所述处理器,还用于通过所述转发进程获取所述第一结果报文中携带的所述第一业务进程的第一进程ID,并根据所述第一进程ID查找所述第一业务进程对应的所述第一共享线性表。
17.根据权利要求16所述的终端,其特征在于,所述第一共享线性表中包括L个存储单元,L为大于或者等于1的整数;
其中,每个所述存储单元至少包括存储单元索引和数据访问状态标记;
所述数据访问状态标记用于标记所述存储单元的数据存储状态;
其中,所述存储单元的数据存储状态包括空闲、正在写、写完成、正在读以及读完成中的一种。
18.根据权利要求17所述的终端,其特征在于,所述处理器用于:
通过所述转发进程根据所述第一报文ID和所述共享线性表的存储单元个数L确定出第一索引,并将所述共享线性表中存储单元索引与所述第一索引相同的存储单元确定为第一存储单元。
19.根据权利要求17或18所述的终端,其特征在于,所述处理器用于:
若通过所述转发进程确定所述第一存储单元的数据存储状态为空闲和/或读完成,则通过所述转发进程将所述第一结果报文写入所述第一存储单元。
20.根据权利要求17或18所述的终端,其特征在于,所述处理器用于:
若通过所述转发进程确定所述第一存储单元的数据存储状态为写完成,则通过所述转发进程将所述第一存储单元中存储的第二结果报文读出,并将所述第一结果报文写入所述第一存储单元;
其中,所述第二结果报文为所述数据处理设备反馈的第二报文的结果报文,所述第二报文为所述第一业务进程通过第二业务线程发送给所述数据处理设备的报文。
21.根据权利要求20所述的终端,其特征在于,所述第二结果报文中包括第二报文ID,所述第二报文ID记录于所述第二业务线程中的第二缓存队列;
所述处理器还用于:
通过所述转发进程将所述第二结果报文存储至第一共享资源回收队列;
通过所述资源回收线程从所述第一共享资源回收队列中读取所述第二结果报文并存储至所述第一业务进程的内存池,并将所述第二报文ID从所述第二缓存队列中删除;
其中,所述第一业务进程的内存池用于存储从所述第一共享线性表中回收的所述第一业务进程的各业务线程的结果报文。
22.根据权利要求17或18所述的终端,其特征在于,所述处理器用于:
若通过所述转发进程确定所述第一存储单元的数据存储状态为正在读,并且正在读的持续时间大于或者等于预设时间阈值,则确定所述第一业务线程从所述第一存储单元中读取所述第一结果报文失败;
通过所述转发进程将所述第一结果报文从所述第一存储单元中读出并存储至第一共享资源回收队列。
23.根据权利要求17所述的终端,其特征在于,所述处理器用于:
通过所述第一业务线程从所述第一缓存队列中读取所述第一报文ID,并根据所述第一报文ID和所述共享线性表的存储单元个数L确定出第二索引;
通过所述第一业务线程从所述共享线性表中查找存储单元索引与所述第二索引相同的所述第一存储单元;
若确定所述第一存储单元的数据存储状态为写完成并且所述第一存储单元中存储的报文ID与所述第一报文ID相同,则确定所述第一存储单元中存储的报文为所述第一结果报文,并从所述第一存储单元中读取所述第一结果报文。
24.根据权利要求23所述的终端,其特征在于,所述处理器还用于:
若确定所述第一存储单元的数据存储状态为写完成,并且所述第一存储单元中存储的报文ID与所述第一报文ID不相同,则确定所述第一存储单元中存储的报文为所述第一结果报文之外的第二结果报文,并将所述第二结果报文从所述第一存储单元中读出并存储至所述第一业务进程的内存池;
其中,所述第一业务进程的内存池用于存储从所述第一共享线性表中回收的所述第一业务进程的各业务线程的结果报文。
25.一种计算机可读存储介质,其特征在于,包括指令,所述指令在计算机上运行时,使得计算机执行如权利要求1-12任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711186460.8A CN109831394B (zh) | 2017-11-23 | 2017-11-23 | 数据处理方法、终端以及计算机存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711186460.8A CN109831394B (zh) | 2017-11-23 | 2017-11-23 | 数据处理方法、终端以及计算机存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109831394A true CN109831394A (zh) | 2019-05-31 |
CN109831394B CN109831394B (zh) | 2021-07-09 |
Family
ID=66859160
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711186460.8A Active CN109831394B (zh) | 2017-11-23 | 2017-11-23 | 数据处理方法、终端以及计算机存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109831394B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111190628A (zh) * | 2019-12-31 | 2020-05-22 | 京信通信***(中国)有限公司 | 基站升级方法、装置、设备和存储介质 |
CN112416610A (zh) * | 2020-11-30 | 2021-02-26 | 南京艾科朗克信息科技有限公司 | 一种证券柜台大并发数据保存数据库的*** |
CN112437132A (zh) * | 2020-11-11 | 2021-03-02 | 周金华 | 基于云计算和数字化升级的业务资源共享方法及云服务器 |
CN113672410A (zh) * | 2021-08-25 | 2021-11-19 | 北京天融信网络安全技术有限公司 | 一种数据处理方法及电子装置 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1937574A (zh) * | 2005-09-19 | 2007-03-28 | 北京大学 | 对网络流进行分类、状态跟踪和报文处理的装置和方法 |
CN102331923A (zh) * | 2011-10-13 | 2012-01-25 | 西安电子科技大学 | 一种基于多核多线程处理器的功能宏流水线实现方法 |
US8869156B2 (en) * | 2010-05-18 | 2014-10-21 | Lsi Corporation | Speculative task reading in a traffic manager of a network processor |
CN107070958A (zh) * | 2017-06-19 | 2017-08-18 | 河海大学 | 一种海量数据高效传输方法 |
CN107077390A (zh) * | 2016-07-29 | 2017-08-18 | 华为技术有限公司 | 一种任务处理方法以及网卡 |
-
2017
- 2017-11-23 CN CN201711186460.8A patent/CN109831394B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1937574A (zh) * | 2005-09-19 | 2007-03-28 | 北京大学 | 对网络流进行分类、状态跟踪和报文处理的装置和方法 |
US8869156B2 (en) * | 2010-05-18 | 2014-10-21 | Lsi Corporation | Speculative task reading in a traffic manager of a network processor |
CN102331923A (zh) * | 2011-10-13 | 2012-01-25 | 西安电子科技大学 | 一种基于多核多线程处理器的功能宏流水线实现方法 |
CN107077390A (zh) * | 2016-07-29 | 2017-08-18 | 华为技术有限公司 | 一种任务处理方法以及网卡 |
CN107070958A (zh) * | 2017-06-19 | 2017-08-18 | 河海大学 | 一种海量数据高效传输方法 |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111190628A (zh) * | 2019-12-31 | 2020-05-22 | 京信通信***(中国)有限公司 | 基站升级方法、装置、设备和存储介质 |
CN111190628B (zh) * | 2019-12-31 | 2023-10-20 | 京信网络***股份有限公司 | 基站升级方法、装置、设备和存储介质 |
CN112437132A (zh) * | 2020-11-11 | 2021-03-02 | 周金华 | 基于云计算和数字化升级的业务资源共享方法及云服务器 |
CN112416610A (zh) * | 2020-11-30 | 2021-02-26 | 南京艾科朗克信息科技有限公司 | 一种证券柜台大并发数据保存数据库的*** |
CN113672410A (zh) * | 2021-08-25 | 2021-11-19 | 北京天融信网络安全技术有限公司 | 一种数据处理方法及电子装置 |
CN113672410B (zh) * | 2021-08-25 | 2023-08-25 | 北京天融信网络安全技术有限公司 | 一种数据处理方法及电子装置 |
Also Published As
Publication number | Publication date |
---|---|
CN109831394B (zh) | 2021-07-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109831394A (zh) | 数据处理方法、终端以及计算机存储介质 | |
CN107395665A (zh) | 一种区块链业务受理及业务共识方法及装置 | |
CN106375404B (zh) | 数据存储控制方法、数据存储方法、数据获取方法及装置 | |
CN105988876B (zh) | 内存分配方法及装置 | |
CN110188110B (zh) | 一种构建分布式锁的方法及装置 | |
CN109064345A (zh) | 消息处理方法、***以及计算机可读存储介质 | |
KR20170097132A (ko) | 데이터베이스에서의 계좌와 관련된 거래 요청의 효율적인 처리를 위한 시스템 | |
CN107256180B (zh) | 数据处理方法、装置及终端 | |
US11102322B2 (en) | Data processing method and apparatus, server, and controller | |
CN106325758B (zh) | 一种队列存储空间管理方法及装置 | |
CN110659905B (zh) | 交易验证方法、装置、终端设备以及存储介质 | |
CN112039926B (zh) | 一种区块链的双层链式架构实现方法 | |
CN111416825A (zh) | 线程间无锁日志管理方法和***、终端、存储介质 | |
CN108460585A (zh) | 一种资源获取方法、资源分配方法、装置及电子设备 | |
CN111861744A (zh) | 一种实现区块链交易并行化的方法及区块链节点 | |
CN114153785B (zh) | 基于远程直接内存访问的内存管理方法和设备 | |
CN109753540A (zh) | 共享资源访问方法、装置及计算机可读取存储介质 | |
CN107220275B (zh) | 数据库句柄处理方法、装置和计算机设备 | |
CN107967265B (zh) | 文件的访问方法、数据服务器和文件访问*** | |
CN107329695A (zh) | 一种分布式存储内存管理方法、***及计算机存储介质 | |
CN109284311B (zh) | 一种获取数据库连接的方法和装置 | |
Denis | Scalability of the NewMadeleine communication library for large numbers of MPI point-to-point requests | |
CN106095594B (zh) | 一种资源处理的方法、装置及*** | |
CN112346848A (zh) | 一种管理内存池的方法、装置及终端 | |
CN108830724A (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 | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20200417 Address after: 518129 Bantian HUAWEI headquarters office building, Longgang District, Guangdong, Shenzhen Applicant after: HUAWEI TECHNOLOGIES Co.,Ltd. Address before: 301, A building, room 3, building 301, foreshore Road, No. 310053, Binjiang District, Zhejiang, Hangzhou Applicant before: Huawei Technologies Co.,Ltd. |
|
TA01 | Transfer of patent application right | ||
GR01 | Patent grant | ||
GR01 | Patent grant |