CN117938985A - 一种数据处理方法、装置、电子设备及存储介质 - Google Patents

一种数据处理方法、装置、电子设备及存储介质 Download PDF

Info

Publication number
CN117938985A
CN117938985A CN202410332747.0A CN202410332747A CN117938985A CN 117938985 A CN117938985 A CN 117938985A CN 202410332747 A CN202410332747 A CN 202410332747A CN 117938985 A CN117938985 A CN 117938985A
Authority
CN
China
Prior art keywords
data
quic
thread
lock
cache queue
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.)
Pending
Application number
CN202410332747.0A
Other languages
English (en)
Inventor
孙梁
王玲
曹文晖
程博锋
褚军
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
New H3C Technologies Co Ltd
Original Assignee
New H3C Technologies Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by New H3C Technologies Co Ltd filed Critical New H3C Technologies Co Ltd
Priority to CN202410332747.0A priority Critical patent/CN117938985A/zh
Publication of CN117938985A publication Critical patent/CN117938985A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/546Message passing systems or structures, e.g. queues
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/16Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
    • H04L69/164Adaptation or special uses of UDP protocol

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

本申请实施例提供了一种数据处理方法、装置、电子设备及存储介质,涉及通信技术领域,该方法包括:通过QUIC线程,从第一UDP缓存区中获取待处理数据,并将待处理数据缓存在QUIC线程的QUIC缓存区;通过QUIC线程,将待处理数据的全部或部分数据存入第一无锁缓存队列,或者将指示待处理数据的全部或部分数据的第一指针存入第一无锁缓存队列;通过QUIC线程,向用户线程发送第一读通知;通过用户线程,响应于第一读通知,从第一无锁缓存队列中读取待处理数据的全部或部分数据,或者从第一无锁缓存队列中读取第一指针,基于第一指针从QUIC缓存区读取待处理数据的全部或部分数据。能够避免因线程阻塞导致的丢包。

Description

一种数据处理方法、装置、电子设备及存储介质
技术领域
本申请涉及通信技术领域,特别是涉及一种数据处理方法、装置、电子设备及存储介质。
背景技术
传输控制协议(Transmission Control Protocol,TCP)是为了在不可靠的互联网商提供可靠的端到端字节流而专门设计的一种传输协议。因TCP协议在复杂度高、数据量大的网络中的表现越来越不好,因此出现了快速用户数据报互联网连接(Quick UserDatagram Protocol Internet Connection,QUIC)协议,QUIC协议是基于用户数据报协议(User Datagram Protocol,UDP)的安全可靠的传输协议。
QUIC协议使用UDP协议栈,电子设备通过QUIC线程接收到的数据包会被缓存在UDP缓存中,然后用户线程从UDP缓存中读取数据包后,该数据包在UDP缓存中占用的空间被释放。但是,当流量突发时,若用户线程未及时从UDP缓存中读取数据包,UDP缓存的读写锁被用户线程持续占用,QUIC无法获取到读写锁,将会导致QUIC线程被用户线程阻塞,电子设备的QUIC线程无法继续向UDP缓存中存入数据包,出现大量丢包的问题。
发明内容
本申请实施例的目的在于提供一种数据处理方法、装置、电子设备及存储介质,以避免因线程阻塞导致的丢包。具体技术方案如下:
第一方面,本申请实施例提供一种数据处理方法,所述方法应用于第一电子设备的CPU,所述CPU运行有QUIC线程和用户线程,所述方法包括:
通过所述QUIC线程,从第一UDP缓存区中获取待处理数据,并将所述待处理数据缓存在所述QUIC线程的QUIC缓存区;
通过所述QUIC线程,将所述待处理数据的全部或部分数据存入第一无锁缓存队列,或者将指示所述待处理数据的全部或部分数据的第一指针存入所述第一无锁缓存队列;
通过所述QUIC线程,向所述用户线程发送第一读通知;
通过所述用户线程,响应于所述第一读通知,从所述第一无锁缓存队列中读取所述待处理数据的全部或部分数据,或者从所述第一无锁缓存队列中读取所述第一指针,基于所述第一指针从所述QUIC缓存区读取所述待处理数据的全部或部分数据。
在一种可能的实现方式中,在所述通过所述QUIC线程,将所述待处理数据的全部或部分数据存入第一无锁缓存队列之后,所述方法还包括:
通过所述QUIC线程,将所述待处理数据的全部或部分数据从所述QUIC缓存区删除。
在一种可能的实现方式中,所述第一指针包括所述待处理数据的全部或部分数据的第一数据地址和第一数据长度;
所述从所述第一无锁缓存队列中读取所述第一指针,基于所述第一指针从所述QUIC缓存区读取所述待处理数据的全部或部分数据,包括:
从所述第一无锁缓存队列中读取所述第一数据地址和第一数据长度;
通过所述用户线程,基于所述第一数据地址和所述第一数据长度,从所述QUIC缓存区读取所述待处理数据的部分或全部数据;
在所述从所述第一无锁缓存队列中读取所述第一指针,基于所述第一指针从所述QUIC缓存区读取所述待处理数据的全部或部分数据之后,所述方法还包括:
通过所述QUIC线程,将所述待处理数据的全部或部分数据从所述QUIC缓存区删除。
在一种可能的实现方式中,所述方法还包括:
当所述第一电子设备与第二电子设备之间成功建立QUIC连接时,通过所述QUIC线程,为所述QUIC连接创建所述第一无锁缓存队列,所述第一无锁缓存队列的长度为预设长度。
在一种可能的实现方式中,所述方法还包括:
通过所述用户线程,将待发送数据的全部或部分数据存入第二无锁缓存队列,或者将指示所述待发送数据的全部或部分数据的第二指针存入所述第二无锁缓存队列;
通过所述用户线程,向所述QUIC线程发送第二读通知;
通过所述QUIC线程,响应于所述第二读通知,从所述第二无锁缓存队列中读取所述待发送数据的全部或部分数据,或者从所述第二无锁缓存队列中读取所述第二指针,基于所述第二指针读取所述待发送数据的全部或部分数据;
通过所述QUIC线程,将读取到的数据封装为第二QUIC数据包;
通过所述QUIC线程,将所述第二QUIC数据包缓存至第二UDP缓存区。
在一种可能的实现方式中,在所述将待发送数据的全部或部分数据存入第二无锁缓存队列之后,所述方法包括:
通过用户线程,将所述待发送数据的全部或部分数据从所述用户线程的缓存区中删除。
在一种可能的实现方式中,所述第二指针包括所述待发送数据的全部或部分数据的第二数据地址和第二数据长度;所述从所述第二无锁缓存队列中读取所述第二指针,基于所述第二指针读取所述待发送数据的全部或部分数据,包括:
从所述第二无锁缓存队列中读取所述第二数据地址和第二数据长度;
通过所述用户线程,基于所述第二数据地址和所述第二数据长度,从所述用户线程的缓存区读取所述待发送数据的全部或部分数据;
在所述从所述第二无锁缓存队列中读取所述第二指针,基于所述第二指针读取所述待发送数据的全部或部分数据之后,所述方法还包括:
通过用户线程,将所述待发送数据的全部或部分数据从所述用户线程的缓存区中删除。
在一种可能的实现方式中,所述方法还包括:
当所述第一电子设备与第二电子设备之间成功建立QUIC连接时,通过所述QUIC线程,为所述QUIC连接创建所述第二无锁缓存队列,所述第二无锁缓存队列的长度为预设长度。
第二方面,本申请实施例提供一种数据处理装置,所述装置应用于第一电子设备的CPU,所述CPU运行有QUIC线程和用户线程,所述装置包括:
读取模块,用于通过所述QUIC线程,从第一UDP缓存区中获取待处理数据,并将所述待处理数据缓存在所述QUIC线程的QUIC缓存区;
存入模块,用于通过所述QUIC线程,将所述待处理数据的全部或部分数据存入第一无锁缓存队列,或者将指示所述待处理数据的全部或部分数据的第一指针存入所述第一无锁缓存队列;
发送模块,用于通过所述QUIC线程,向所述用户线程发送第一读通知;
读取模块,用于通过所述用户线程,响应于所述第一读通知,从所述第一无锁缓存队列中读取所述待处理数据的全部或部分数据,或者从所述第一无锁缓存队列中读取所述第一指针,基于所述第一指针从所述QUIC缓存区读取所述待处理数据的全部或部分数据。
在一种可能的实现方式中,所述装置还包括:
删除模块,用于通过所述QUIC线程,将所述待处理数据的全部或部分数据从所述QUIC缓存区删除。
在一种可能的实现方式中,所述第一指针包括所述待处理数据的全部或部分数据的第一数据地址和第一数据长度;所述装置还包括删除模块;
所述读取模块,具体用于从所述第一无锁缓存队列中读取所述第一数据地址和第一数据长度;通过所述用户线程,基于所述第一数据地址和所述第一数据长度,从所述QUIC缓存区读取所述待处理数据的部分或全部数据;
所述删除模块,用于通过所述QUIC线程,将所述待处理数据的全部或部分数据从所述QUIC缓存区删除。
在一种可能的实现方式中,所述装置还包括:
创建模块,用于当所述第一电子设备与第二电子设备之间成功建立QUIC连接时,通过所述QUIC线程,为所述QUIC连接创建所述第一无锁缓存队列,所述第一无锁缓存队列的长度为预设长度。
在一种可能的实现方式中,所述装置还包括封装模块和缓存模块;
所述存入模块,还用于通过所述用户线程,将待发送数据的全部或部分数据存入第二无锁缓存队列,或者将指示所述待发送数据的全部或部分数据的第二指针存入所述第二无锁缓存队列;
所述发送模块,还用于通过所述用户线程,向所述QUIC线程发送第二读通知;
所述读取模块,还用于通过所述QUIC线程,响应于所述第二读通知,从所述第二无锁缓存队列中读取所述待发送数据的全部或部分数据,或者从所述第二无锁缓存队列中读取所述第二指针,基于所述第二指针读取所述待发送数据的全部或部分数据;
所述封装模块,用于通过所述QUIC线程,将读取到的数据封装为第二QUIC数据包;
所述缓存模块,用于通过所述QUIC线程,将所述第二QUIC数据包缓存至第二UDP缓存区。
在一种可能的实现方式中,所述装置还包括:
删除模块,用于通过用户线程,将所述待发送数据的全部或部分数据从所述用户线程的缓存区中删除。
在一种可能的实现方式中,所述第二指针包括所述待发送数据的全部或部分数据的第二数据地址和第二数据长度;所述装置还包括删除模块;
所述读取模块,具体用于从所述第二无锁缓存队列中读取所述第二数据地址和第二数据长度;通过所述用户线程,基于所述第二数据地址和所述第二数据长度,从所述用户线程的缓存区读取所述待发送数据的全部或部分数据;
所述删除模块,用于通过用户线程,将所述待发送数据的全部或部分数据从所述用户线程的缓存区中删除。
在一种可能的实现方式中,所述装置还包括创建模块;
所述创建模块,用于当所述第一电子设备与第二电子设备之间成功建立QUIC连接时,通过所述QUIC线程,为所述QUIC连接创建所述第二无锁缓存队列,所述第二无锁缓存队列的长度为预设长度。
第三方面,本申请实施例提供一种电子设备,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;
存储器,用于存放计算机程序;
处理器,用于执行存储器上所存放的程序时,实现上述第一方面所述的方法。
第四方面,本申请实施例提供了一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现第一方面所述的方法。
第五方面,本申请实施例提供了一种计算机程序产品,所述计算机程序产品包含可执行指令,当所述可执行指令在计算机上执行时,使得计算机执行第一方面所述的方法。
采用上述技术方案,通过QUIC线程,从第一UDP缓存区中获取待处理数据,并将待处理数据缓存在QUIC缓存区,然后通过QUIC线程,将待处理数据的全部或部分数据存入第一无锁缓存队列,或者将指示待处理数据的全部或部分数据的第一指针存入第一无锁缓存队列,并向用户线程发送第一读通知。也就是说,QUIC线程可以及时将第一UDP缓存区中的待处理数据读取出来,从而及时释放第一UDP缓存区的内存空间,使得后续接收到的待处理数据能够及时被存入第一UDP缓存区,避免丢包。并且QUIC线程将第一指针或者待处理数据的全部或部分数据存入第一无锁缓存队列,用户线程基于第一无锁缓存队列获取待处理数据的全部或部分数据的过程不会影响QUIC线程,即用户线程与QUIC线程的处理异步进行,能够避免用户线程未及时从第一UDP缓存区中读取数据而导致的线程阻塞,能够大幅缓解流量突发时的丢包问题。
当然,实施本申请的任一产品或方法并不一定需要同时达到以上所述的所有优点。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的实施例。
图1为本申请实施例提供的一种网络模型的示意图;
图2为本申请实施例提供的第一种数据处理方法的流程图;
图3为本申请实施例提供的第一种数据处理方法的示例性示意图;
图4为本申请实施例提供的第二种数据处理方法的示例性示意图;
图5为本申请实施例提供的第二种数据处理方法的流程图;
图6为本申请实施例提供的第三种数据处理方法的示例性示意图;
图7为本申请实施例提供的第四种数据处理方法的示例性示意图;
图8为本申请实施例提供的一种数据处理装置的结构示意图;
图9为本申请实施例提供的一种电子设备的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员基于本申请所获得的所有其他实施例,都属于本申请保护的范围。
TCP协议用于实现计算机网络之间的互联,TCP协议属于网络模型中的传输层。网络模型如图1所示,包括应用层、传输层、网络层和链路层,网络层即为互联网协议(Internet Protocol,IP)层。
TCP协议提供可靠的顺序字节流传输。TCP协议的发送端对应用数据进行顺序传输,接收端对接收的数据进行确认(Acknowledge,ACK),并顺序将数据传递给应用层,发送端通过丢包检测机制对丢失数据进行重传,保障数据传输可靠。
但从TCP协议出现至今,网络环境发生了天翻地覆的变化,网络数据量爆炸性增长,且网络复杂度急剧升高。TCP协议实现在内核,协议升级会涉及到大量的用户设备、服务设备和中间设备中,使得TCP协议的迭代升级困难重重,导致了协议的僵化。
在复杂度高、数据量大的网络环境中,TCP协议的表现越来越不好,因此出现了QUIC协议,QUIC协议是一种基于连接的有状态的SERVER-CLIENT(服务端-客户端)通用传输协议,相比于TCP协议,QUIC协议具备以下优势:
1、自带多路复用。应用程序可以通过QUIC流传输可靠用户数据,一条QUIC连接中可以起多条QUIC流,每条QUIC流相互独立,从而避免TCP中发生的队头阻塞问题。
2、支持连接迁移。QUIC协议将连接ID作为连接标识符,相比于TCP使用IP地址与端口号作为连接标识符将连接严格绑定到单个网络路径,QUIC协议将连接ID作为连接标识符,在移动终端、网络地址转换(Network Address Translation,NAT)重绑定等情况下,可以保持QUIC连接不断。
3、0往返时延(Round-Trip Time,RTT)。QUIC协议握手过程进行了加密与参数协商,简化了安全传输层(Transport Layer Security,TLS)协议握手流程,实现最短支持0RTT建立连接。
4、天然安全的数据传输。QUIC协议默认嵌入TLS 1.3加密机制对包头加密,报文明文量少并结合签名认证,保证数据安全可靠传输。
5、精确的RTT测量。TCP为了保证可靠性,使用了基于字节序号的序列号及ACK来确认消息的有序到达,TCP重传数据的序列号和原始的数据的序列号保持一致,会导致重传歧义问题,而QUIC协议使用严格递增的包号代替序列号,能够准确采样RTT。
6、增强的ACK确认机制。QUIC协议最大支持256个ACK块(TCP最大3个),在高丢包网络环境下可以加速网络恢复,减少重传量。
7、可插拔拥塞控制算法。QUIC协议实现在用户态,拥塞控制算法不需要操作系统、内核支持,便于部署、升级,支持产品快速迭代。QUIC协议可根据不同应用场景提供更精确、有效的拥塞控制。
8、协议栈用户层实现。QUIC协议实现在用户层,协议优化升级或者定向优化,对于服务来说甚至可以实现热升级,且对于同一用户不同的QUIC连接,可以使用不同的拥塞控制算法。
9、连接上提供数据报传输。如果用户某些数据不需要可靠传输,QUIC连接提供UDP传输,即不可靠传输。
在QUIC协议日益流行的同时,QUIC协议仍存在一些问题,QUIC协议使用UDP协议栈,电子设备通过QUIC线程接收到的数据包被缓存在UDP缓存区中,且通过QUIC协议进行流量控制时不会考虑UDP缓存区的占用情况。因此,当流量突发时,若用户线程未及时将UDP缓存区中的数据读取出来,将会导致UDP缓存区无足够的内存空间缓存流量突发时的数据包,导致出现大量丢包的问题。并且,用户线程与QUIC线程是同步的,用户线程处理UDP缓存区的数据包时会阻塞QUIC线程,导致QUIC线程无法继续向UDP缓存中存入数据包,在流量突发时会出现大量丢包。
为了解决上述问题,本申请实施例提供一种数据处理方法,该方法应用于第一电子设备的CPU,CPU运行有QUIC线程和用户线程。其中,第一电子设备为支持QUIC协议的电子设备,如图2所示,该方法包括:
S201、通过QUIC线程,从第一UDP缓存区中获取待处理数据,并将待处理数据缓存在QUIC线程的QUIC缓存区。
其中,第一UDP缓存区用于缓存第一电子设备接收到的QUIC数据包。
第一电子设备基于UDP协议栈接收到其他电子设备发送的QUIC数据包后,会将QUIC数据包存入第一UDP缓存区。在本申请实施例中,QUIC线程会及时读取第一UDP缓存区中的QUIC数据包,并对QUIC数据包进行解析,即去除QUIC数据包的QUIC报头,得到QUIC数据包的payload部分的待处理数据。可以理解的是,QUIC线程从第一UDP缓存区中读取出第一QUIC数据包后,第一QUIC数据包在第一UDP缓存区中占用的缓存空间被释放。
其中,待处理数据可以为应用数据。例如,两个电子设备之间通过QUIC协议传输视频数据,则待处理数据为视频数据;若两个电子设备之间通过QUIC协议传输图像数据,则待处理数据为图像数据。
S202、通过QUIC线程,将待处理数据的全部或部分数据存入第一无锁缓存队列,或者将指示待处理数据的全部或部分数据的第一指针存入第一无锁缓存队列。
第一无锁缓存队列具体可以为quic套接字(socket)的环形缓冲区(ringbuffer),环形缓冲区是一种用于表示一个固定尺寸、头尾相连的缓冲区的数据结构。第一无锁缓存队列具有头(Head)信息和尾(tail)信息,头信息用于指示对第一无锁缓存队列进行读操作时的位置,尾信息用于指示对第一无锁缓存队列进行写操作时的位置。
QUIC线程从当前的尾信息指示的位置开始写入待处理数据的全部或部分数据或第一指针,然后将尾信息指示的位置更新为第一无锁缓存队列中未被占用的下一个位置。可以理解的是,向第一无锁缓存队列写入的数据或者第一指针所需占用的存储空间小于等于第一无锁缓存队列的剩余存储空间。
S203、通过QUIC线程,向用户线程发送第一读通知。
QUIC线程可以通过线程同步的方式向用户线程发送第一读通知,线程同步的方式例如可以为管道(pipe),套接字(socketpair),eventfd等方式。其中,eventfd是Linux内核提供的一种进程间通信机制,主要用于同一进程内或不同进程间的线程通信。
S204、通过用户线程,响应于第一读通知,从第一无锁缓存队列中读取待处理数据的全部或部分数据,或者从第一无锁缓存队列中读取第一指针,基于第一指针从QUIC缓存区读取待处理数据的全部或部分数据。
其中,用户线程具体为应用程序的线程,例如,若电子设备之间传输的是视频数据,则应用程序可以为视频APP或社交APP。
可以理解的是,用户线程获取待处理数据的全部或部分数据后,即可按照业务需求对获取到的数据进行处理。
采用该方法,通过QUIC线程,从第一UDP缓存区中获取待处理数据,并将待处理数据缓存在QUIC缓存区,然后通过QUIC线程,将待处理数据的全部或部分数据存入第一无锁缓存队列,或者将指示待处理数据的全部或部分数据的第一指针存入第一无锁缓存队列,并向用户线程发送第一读通知。也就是说,QUIC线程可以及时将第一UDP缓存区中的待处理数据读取出来,从而及时释放第一UDP缓存区的内存空间,使得后续接收到的待处理数据能够及时被存入第一UDP缓存区,避免丢包。并且QUIC线程将第一指针或者待处理数据的全部或部分数据存入第一无锁缓存队列,用户线程基于第一无锁缓存队列获取待处理数据的全部或部分数据的过程不会影响QUIC线程,即用户线程与QUIC线程的处理异步进行,能够避免用户线程未及时从第一UDP缓存区中读取数据而导致的线程阻塞,能够大幅缓解流量突发时的丢包问题。
本申请实施例提供了两种第一无锁缓存队列的实现方式,分别为有拷贝的第一无锁缓存队列和无拷贝的第一无锁缓存队列,以下分别进行介绍。
方式一、有拷贝的第一无锁缓存队列。
在该实现方式中,通过QUIC线程,将待处理数据的全部或部分数据从QUIC缓存区拷贝至第一无锁缓存队列,并且可用过用户线程,响应于第一读通知,从第一无锁缓存队列中读取待处理数据的全部或部分数据。
其中,QUIC线程将待处理数据的全部或部分数据拷贝至quic socket的第一无锁缓存队列,并接收拷贝成功的数据长度。在完成拷贝后,QUIC线程更新第一无锁缓存队列的tail信息。向第一无锁缓存队列拷贝数据以及更新tail信息的过程为入队(enque)过程。后续再向第一无锁缓存队列存入数据时,从tail信息指示的位置开始存入。
需要说明的是,QUIC线程可以尝试将待处理数据包括的全部或部分数据拷贝至第一无锁缓存队列,并接收拷贝成功的数据长度。若QUIC线程向第一无锁缓存队列拷贝数据的速度大于用户线程从第一无锁缓存队列读取数据的速度,则QUIC线程收到的拷贝成功的数据长度小于待处理数据的长度,或者可能收到EAGAIN错误状态,这种情况下QUIC线程在预设时长后,继续尝试拷贝剩余的待处理数据,具体可以每隔预设时长进行一次轮询,直至拷贝成功。其中,EAGAIN错误状态用于表示当前操作暂时无法完成,可以再试一次。在预设时长后,第一无锁缓存队列中的数据可能已被读取,因此剩余存储空间变大,QUIC线程即可继续向第一无锁缓存队列存入数据。
如图3所示,图3为方式一的示例,快速用户数据报互联网连接(QUIC)缓存区中缓存有待处理数据,快速用户数据报互联网连接(QUIC)线程先将待处理数据的全部或部分数据拷贝至第一无锁缓存队列,该拷贝过程可称为入队拷贝(enque copy),然后通过可读事件的通知机制,使得用户线程感知到需要从第一无锁缓存队列中读取数据。后续用户线程可异步从第一无锁缓存队列中读取待处理数据的全部或部分数据,并缓存在用户线程缓存区,该过程可称为出队拷贝(deque copy)。可以理解的是,用户线程从第一无锁缓存队列中读取待处理数据的全部或部分数据后,待处理数据的全部或部分数据在第一无锁缓存队列中占用的存储空间即可被释放。
采用该方法,QUIC线程可及时读取第一UDP缓存区中的待处理数据,将待处理数据包括的待处理数据的全部或部分数据存入第一无锁缓存队列,进而用户线程异步从第一无锁缓存队列中读取待处理数据的全部或部分数据。如此,无需等待用户线程从第一UDP缓存区中读取并处理数据,可以及时释放第一UDP缓存区的存储空间,由于用户线程无需从第一UDP缓存区中读取数据,因此不会占用第一UDP缓存区的读写锁,从而使得用户线程不会阻塞QUIC线程接收新的QUIC数据包,能够避免因第一UDP缓存区的存储空间未及时释放以及线程阻塞导致的丢包问题。
在将待处理数据的全部或部分数据存入第一无锁缓存队列后,即可通过QUIC线程,将待处理数据的全部或部分数据从QUIC缓存区删除,如此,QUIC线程无需管理待处理数据的生命周期,可以及时释放QUIC缓存区的存储空间,以便继续缓存后续的待处理数据,进一步缓解丢包的问题。
方式二、无拷贝的第一无锁缓存队列。
在该实现方式中,通过QUIC线程,将指示待处理数据的全部或部分数据的第一指针存入第一无锁缓存队列,第一指针包括第一数据地址和第一数据长度。
其中,在将第一数据地址和第一数据长度存入第一无锁缓存队列之前,第一数据地址和第一数据长度在第一无锁缓存队列中占用的存储空间小于第一无锁缓存队列的剩余存储空间。
相应地,上述S204中的,从第一无锁缓存队列中读取第一指针,基于第一指针从QUIC缓存区读取待处理数据的全部或部分数据,具体实现为:从第一无锁缓存队列中读取第一数据地址和第一数据长度;通过用户线程,基于所述第一数据地址和第一数据长度从QUIC缓存区读取待处理数据的全部或部分数据。
其中,QUIC线程可将第一数据地址和第一数据长度存入quic socket的第一无锁缓存队列,并更新第一无锁缓存队列的tail信息。后续再向第一无锁缓存队列存入数据指针时,从tail信息指示的位置开始存入。需要说明的是,此时QUIC缓存区中的第一指针指示的待处理数据的全部或部分数据未被释放。
然后用户线程接收到QUIC线程发送的第一读通知后,先从第一无锁缓存队列中读取第一数据地址和第一数据长度,完成读取后,第一数据地址和第一数据长度在第一无锁缓存队列中占用的存储空间被释放。此时可更新第一无锁缓存队列的Head信息,后续再从第一无锁缓存队列中读取数据指针时,从Head信息指示的位置处开始读取。
如图4所示,图4为方式二的示例,快速用户数据报互联网连接(QUIC)缓存区中缓存有待处理数据,快速用户数据报互联网连接(QUIC)线程将第一数据地址和第一数据长度存入第一无锁缓存队列,该过程可称为数据指针入队(Data Pointer enque)。然后通过可读事件的通知机制,通知用户线程需要从第一无锁缓存队列中读取数据,进而用户线程从第一无锁缓存队列中读取第一数据地址和第一数据长度,该过程可称为数据指针出队(Data Pointer deque)。然后用户线程基于第一数据地址和第一数据长度从QUIC缓存区拷贝待处理数据的部分或全部数据,并缓存在用户线程缓存区,确定用户线程完成拷贝后,QUIC线程即可将第一指针指示的待处理数据的全部或部分数据从QUIC缓存区删除。
采用该方法,QUIC线程无需将待处理数据的全部或部分数据拷贝至第一无锁缓存队列,只需将第一指针存入第一无锁缓存队列,可以减少一次数据拷贝过程,处理速度更快。并且QUIC线程已经将第一UDP缓存区中的待处理数据读取出来,并存入QUIC缓存区。即第一UDP缓存区内的存储空间已被释放,用户线程可随时从第一无锁缓存队列获取第一指针并从QUIC缓存区读取第一指针指示的数据,不会阻塞QUIC线程接收新的QUIC数据包,能够避免因第一UDP缓存区的存储空间未及时释放以及线程阻塞导致的丢包问题。
在本申请的一些实施例中,当第一电子设备与第二电子设备之间成功建立QUIC连接时,通过QUIC线程为该QUIC连接创建第一无锁缓存队列,第一无锁缓存队列的长度为预设长度。
作为示例,在100G带宽下,第一无锁缓存队列占用的内存空间可以为50M;在1G带宽下,第一无锁缓存队列占用的内存空间可以为5M。
如此,每个QUIC连接均具有自己的第一无锁缓存队列,通过该第一无锁缓存队列,可以避免用户线程和QUIC线程争抢读写锁而造成的处理效率低的问题,且能够使得QUIC线程快速读取第一UDP缓存区内的QUIC数据包,及时释放第一UDP缓存区的内存空间,避免流量突发时UDP协议栈的丢包。并且,由于第一无锁缓存队列的队列长度是固定的,可以避免内存的频繁申请与释放,QUIC线程可充分利用第一无锁缓存队列的内存资源,缓解流量突发时的丢包问题。
可以理解的是,在上述实施例中第一电子设备均作为QUIC数据包的接收端,在一些实施例中,第一电子设备还可作为QUIC数据包的发送端,基于此,当第一电子设备与第二电子设备之间成功建立QUIC连接时,还可通过QUIC线程为该QUIC连接创建第二无锁缓存队列,第二无锁缓存队列的长度为第一长度。
作为示例,在100G带宽下,第二无锁缓存队列占用的内存空间可以为50M;在1G带宽下,第二无锁缓存队列占用的内存空间可以为5M。
在第一电子设备已创建第二无锁缓存队列的基础上,如图5所示,该方法还包括:
S501、通过用户线程,将待发送数据的全部或部分数据存入第二无锁缓存队列,或者将指示待发送数据的全部或部分数据的第二指针存入第二无锁缓存队列。
其中,待发送的数据为待发送的应用数据,也可称为用户数据。例如,两个电子设备之间通过QUIC协议传输视频数据,则待发送数据为视频数据;若两个电子设备之间通过QUIC协议传输图像数据,则待发送数据为图像数据。
第二无锁缓存队列具体可以为quic socket的环形缓冲区(ring buffer)。第二无锁缓存队列具有Head信息和tail信息,Head信息用于指示对第二无锁缓存队列进行读操作时的位置,tail信息用于指示对第二无锁缓存队列进行写操作时的位置。
QUIC线程从当前的tail信息指示的位置开始写入待处理数据的全部或部分数据或第二指针,然后将尾信息指示的位置更新为第二无锁缓存队列中未被占用的下一个位置。可以理解的是,向第二无锁缓存队列写入的数据或者第二指针所需占用的存储空间小于等于第一无锁缓存队列的剩余存储空间。
S502、通过用户线程,向QUIC线程发送第二读通知。
用户线程可以通过线程同步的方式向QUIC线程发送第二读通知,线程同步的方式例如可以为管道(pipe),套接字(socketpair),eventfd等方式。
S503、通过QUIC线程,响应于第二读通知,从第二无锁缓存队列中读取待发送数据的全部或部分数据,或者从第二无锁缓存队列中读取第二指针,基于第二指针读取待发送数据的全部或部分数据。
S504、通过QUIC线程,将读取到的数据封装为第二QUIC数据包。
S505、通过QUIC线程,将第二QUIC数据包缓存至第二UDP缓存区。
可以理解的是,将第二QUIC数据包缓存至第二UDP缓存区后,后续第一电子设备即可通过UDP协议栈将第二QUIC数据包发送至第二电子设备。
采用该方法,用户线程将待发送数据的全部或部分数据或者第二指针写入第二无锁缓存队列的过程,与QUIC线程获取数据并封装第二QUIC数据包的过程异步进行,用户线程无需等待QUIC线程封装好QUIC数据包后再继续传输待发送数据,而是可以提前传输,能够减少等待的耗时,可以使得数据发送过程更平滑,能够提高待发送数据的发送效率,避免线程阻塞。
本申请实施例提供了两种第二无锁缓存队列的实现方式,分别为有拷贝的第二无锁缓存队列和无拷贝的第二无锁缓存队列,以下分别进行介绍:
方式1、有拷贝的第二无锁缓存队列。
在该实现方式中,通过用户线程,将待发送数据的全部或部分数据从用户线程缓存区拷贝至第二无锁缓存队列,并且可通过QUIC线程,响应于第二读通知,从第二无锁缓存队列中读取待发送数据的全部或部分数据。
其中,用户线程可以调用quic_send接口,从而通过quic_send接口将待发送数据的全部或部分数据拷贝至quic socket的第二无锁缓存队列。并且quic_send接口会向用户线程返回拷贝成功的数据长度。在完成拷贝后,用户线程更新第二无锁缓存队列的tail信息。向第二无锁缓存队列拷贝数据以及更新tail信息的过程为入队(enque)过程。后续再向第二无锁缓存队列存入数据时,从tail信息指示的位置开始存入。
需要说明的是,用户线程可以尝试将待发送数据包括的全部或部分数据拷贝至第二无锁缓存队列,并接收拷贝成功的数据长度。若拷贝成功的数据长度小于待发送数据的长度,则用户线程在预设时长后,继续拷贝剩余的待发送数据。具体可以每隔预设时长进行一次轮询,直至拷贝成功。在预设时长后,第二无锁缓存队列中的数据可能已经被读取,因此剩余存储空间变大,用户线程即可继续向第二无锁缓存队列存入数据。
如图6所示,图6为方式1的示例,用户线程缓存区内存储有待发送数据,用户线程先将待发送数据的全部或部分数据拷贝至第二无锁缓存队列,该拷贝过程可称为入队拷贝(enque copy)。后续快速用户数据报互联网连接(QUIC)线程可异步从第二无锁缓存队列中读取待发送数据的全部或部分数据,并存储在快速用户数据报互联网连接(QUIC)缓存区,该过程可称为出队拷贝(deque copy)。可以理解的是,QUIC线程从第二无锁缓存队列中读取待发送数据的全部或部分数据后,待处理数据的全部或部分数据在第二无锁缓存队列中占用的存储空间即可被释放。
采用该方法,用户线程先将待发送数据的全部或部分数据存入第二无锁缓存区,后续QUIC线程可异步从第二无锁缓存区读取待发送数据的全部或部分数据,并将读取到的数据封装为QUIC数据包,异步处理的方式能够提升数据发送效率。
在将待发送数据的全部或部分数据存入第二无锁缓存队列后,即可通过用户线程,将待发送数据的全部或部分数据从用户线程缓存区中删除,如此,用户线程无需管理待发送数据的生命周期,可继续处理其他待发送数据,能够提升数据处理效率。
方式2、无拷贝的第二无锁缓存队列。
在该实现方式中,通过用户线程,将指示待发送数据的全部或部分数据的第二指针存入第二无锁缓存队列,第二指针包括待发送数据的全部或部分数据的第二数据地址和第二数据长度。
其中,在将第二数据地址和第二数据长度存入第二无锁缓存队列之前,第二数据地址和第二数据长度在第二无锁缓队列中占用的存储空间小于第二无锁缓存队列的剩余存储空间。
相应地,上述S503中的,从第二无锁缓存队列中读取第二指针,基于第二指针读取待发送数据的全部或部分数据,具体实现为:
从第二无锁缓存队列中读取第二数据地址和第二数据长度;通过用户线程,基于第二数据地址和第二数据长度,从用户线程的缓存区读取待发送数据的全部或部分数据。
其中,用户线程可调用quic_send接口,从而通过quic_send接口将第二数据地址和第二数据长度存入quic socket的第二无锁缓存队列,并更新第二无锁缓存队列的tail信息。后续再向第二无锁缓存队列存入数据指针时,从tail信息指示的位置开始存入。需要说明的是,此时用户线程缓存区中的待发送数据的全部或部分数据未被释放。
然后QUIC线程接收到用户线程发送的第二读通知后,先从第二无锁缓存队列中读取第二数据地址和第二数据长度,完成读取后,第二数据地址和第二数据长度在第二无锁缓存队列中占用的存储空间被释放。此时可更新第二无锁缓存队列的Head信息,后续再从第二无锁缓存队列中读取数据指针时,从Head信息指示的位置处开始读取。
如图7所示,图7为方式2的示例,用户线程将第二数据地址和第二数据长度存入第二无锁缓存队列,该过程可称为数据指针入队(Data Pointer enque)。然后快速用户数据报互联网连接(QUIC)线程从第二无锁缓存队列中读取第二数据地址和第二数据长度,该过程可称为数据指针出队(Data Pointer deque)。然后QUIC线程基于第二数据地址和第二数据长度从用户线程缓存区拷贝待发送数据的全部或部分数据,并存储于快速用户数据报互联网连接(QUIC)缓存区,用户线程确定QUIC线程完成拷贝后,用户线程即可将已拷贝的待发送数据的全部或部分数据从用户线程缓存区中删除。具体地,QUIC线程完成拷贝后,可回调应用层释放数据的函数以触发对待发送数据的全部或部分数据的释放。
采用该方法,用户线程无需将待发送数据的全部或部分数据拷贝至第二无锁缓存队列,可以减少一次数据拷贝过程,处理速度更快。且用户线程与QUIC线程异步处理,可以提升数据发送效率。
对应于上述方法实施例,本申请实施例还提供一种数据处理装置,该装置应用于第一电子设备的CPU,CPU运行有QUIC线程和用户线程,如图8所示,该装置包括:
读取模块801,用于通过QUIC线程,从第一UDP缓存区中获取待处理数据,并将待处理数据缓存在QUIC线程的QUIC缓存区;
存入模块802,用于通过QUIC线程,将待处理数据的全部或部分数据存入第一无锁缓存队列,或者将指示待处理数据的全部或部分数据的第一指针存入第一无锁缓存队列;
发送模块803,用于通过QUIC线程,向用户线程发送第一读通知;
读取模块801,用于通过用户线程,响应于第一读通知,从第一无锁缓存队列中读取待处理数据的全部或部分数据,或者从第一无锁缓存队列中读取第一指针,基于第一指针从QUIC缓存区读取待处理数据的全部或部分数据。
可选地,该装置还包括:
删除模块,用于通过QUIC线程,将待处理数据的全部或部分数据从QUIC缓存区删除。
可选地,第一指针包括待处理数据的全部或部分数据的第一数据地址和第一数据长度;该装置还包括删除模块;
读取模块801,具体用于从第一无锁缓存队列中读取第一数据地址和第一数据长度;通过用户线程,基于第一数据地址和第一数据长度,从QUIC缓存区读取待处理数据的部分或全部数据;
删除模块,用于通过QUIC线程,将待处理数据的全部或部分数据从QUIC缓存区删除。
可选地,该装置还包括:
创建模块,用于当第一电子设备与第二电子设备之间成功建立QUIC连接时,通过QUIC线程,为QUIC连接创建第一无锁缓存队列,第一无锁缓存队列的长度为预设长度。
可选地,该装置还包括封装模块和缓存模块;
存入模块802,还用于通过用户线程,将待发送数据的全部或部分数据存入第二无锁缓存队列,或者将指示待发送数据的全部或部分数据的第二指针存入第二无锁缓存队列;
发送模块803,还用于通过用户线程,向QUIC线程发送第二读通知;
读取模块801,还用于通过QUIC线程,响应于第二读通知,从第二无锁缓存队列中读取待发送数据的全部或部分数据,或者从第二无锁缓存队列中读取第二指针,基于第二指针读取待发送数据的全部或部分数据;
封装模块,用于通过QUIC线程,将读取到的数据封装为第二QUIC数据包;
缓存模块,用于通过QUIC线程,将第二QUIC数据包缓存至第二UDP缓存区。
可选地,该装置还包括:
删除模块,用于通过用户线程,将待发送数据的全部或部分数据从用户线程的缓存区中删除。
可选地,第二指针包括待发送数据的全部或部分数据的第二数据地址和第二数据长度;该装置还包括删除模块;
读取模块801,具体用于从第二无锁缓存队列中读取第二数据地址和第二数据长度;通过用户线程,基于第二数据地址和第二数据长度,从用户线程的缓存区读取待发送数据的全部或部分数据;
删除模块,用于通过用户线程,将待发送数据的全部或部分数据从用户线程的缓存区中删除。
在一种可能的实现方式中,该装置还包括创建模块;
创建模块,用于当第一电子设备与第二电子设备之间成功建立QUIC连接时,通过QUIC线程,为QUIC连接创建第二无锁缓存队列,第二无锁缓存队列的长度为预设长度。
对应于上述方法实施例,本申请实施例还提供了一种电子设备,如图9所示,包括处理器901、通信接口902、存储器903和通信总线904,其中,处理器901,通信接口902,存储器903通过通信总线904完成相互间的通信,
存储器903,用于存放计算机程序;
处理器901,用于执行存储器903上所存放的程序时,实现上述方法实施例中的方法步骤。
上述电子设备提到的通信总线可以是外设部件互连标准(Peripheral ComponentInterconnect,PCI)总线或扩展工业标准结构(Extended Industry StandardArchitecture,EISA)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
通信接口用于上述电子设备与其他设备之间的通信。
存储器可以包括随机存取存储器(Random Access Memory,RAM),也可以包括非易失性存储器(Non-Volatile Memory,NVM),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。
上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(Network Processor,NP)等;还可以是数字信号处理器(Digital SignalProcessor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
在本申请提供的又一实施例中,还提供了一种计算机可读存储介质,该计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述任一数据处理方法的步骤。
在本申请提供的又一实施例中,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述实施例中任一数据处理方法。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘Solid State Disk (SSD))等。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本申请的较佳实施例,并非用于限定本申请的保护范围。凡在本申请的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本申请的保护范围内。

Claims (12)

1.一种数据处理方法,其特征在于,所述方法应用于第一电子设备的CPU,所述CPU运行有QUIC线程和用户线程,所述方法包括:
通过所述QUIC线程,从第一UDP缓存区中获取待处理数据,并将所述待处理数据缓存在所述QUIC线程的QUIC缓存区;
通过所述QUIC线程,将所述待处理数据的全部或部分数据存入第一无锁缓存队列,或者将指示所述待处理数据的全部或部分数据的第一指针存入所述第一无锁缓存队列;
通过所述QUIC线程,向所述用户线程发送第一读通知;
通过所述用户线程,响应于所述第一读通知,从所述第一无锁缓存队列中读取所述待处理数据的全部或部分数据,或者从所述第一无锁缓存队列中读取所述第一指针,基于所述第一指针从所述QUIC缓存区读取所述待处理数据的全部或部分数据。
2.根据权利要求1所述的方法,其特征在于,在所述通过所述QUIC线程,将所述待处理数据的全部或部分数据存入第一无锁缓存队列之后,所述方法还包括:
通过所述QUIC线程,将所述待处理数据的全部或部分数据从所述QUIC缓存区删除。
3.根据权利要求1所述的方法,其特征在于,所述第一指针包括所述待处理数据的全部或部分数据的第一数据地址和第一数据长度;
所述从所述第一无锁缓存队列中读取所述第一指针,基于所述第一指针从所述QUIC缓存区读取所述待处理数据的全部或部分数据,包括:
从所述第一无锁缓存队列中读取所述第一数据地址和第一数据长度;
通过所述用户线程,基于所述第一数据地址和所述第一数据长度,从所述QUIC缓存区读取所述待处理数据的部分或全部数据;
在所述从所述第一无锁缓存队列中读取所述第一指针,基于所述第一指针从所述QUIC缓存区读取所述待处理数据的全部或部分数据之后,所述方法还包括:
通过所述QUIC线程,将所述待处理数据的全部或部分数据从所述QUIC缓存区删除。
4.根据权利要求1-3任一项所述的方法,其特征在于,所述方法还包括:
当所述第一电子设备与第二电子设备之间成功建立QUIC连接时,通过所述QUIC线程,为所述QUIC连接创建所述第一无锁缓存队列,所述第一无锁缓存队列的长度为预设长度。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括:
通过所述用户线程,将待发送数据的全部或部分数据存入第二无锁缓存队列,或者将指示所述待发送数据的全部或部分数据的第二指针存入所述第二无锁缓存队列;
通过所述用户线程,向所述QUIC线程发送第二读通知;
通过所述QUIC线程,响应于所述第二读通知,从所述第二无锁缓存队列中读取所述待发送数据的全部或部分数据,或者从所述第二无锁缓存队列中读取所述第二指针,基于所述第二指针读取所述待发送数据的全部或部分数据;
通过所述QUIC线程,将读取到的数据封装为第二QUIC数据包;
通过所述QUIC线程,将所述第二QUIC数据包缓存至第二UDP缓存区。
6.根据权利要求5所述的方法,其特征在于,在所述将待发送数据的全部或部分数据存入第二无锁缓存队列之后,所述方法包括:
通过用户线程,将所述待发送数据的全部或部分数据从所述用户线程的缓存区中删除。
7.根据权利要求5所述的方法,其特征在于,所述第二指针包括所述待发送数据的全部或部分数据的第二数据地址和第二数据长度;所述从所述第二无锁缓存队列中读取所述第二指针,基于所述第二指针读取所述待发送数据的全部或部分数据,包括:
从所述第二无锁缓存队列中读取所述第二数据地址和第二数据长度;
通过所述用户线程,基于所述第二数据地址和所述第二数据长度,从所述用户线程的缓存区读取所述待发送数据的全部或部分数据;
在所述从所述第二无锁缓存队列中读取所述第二指针,基于所述第二指针读取所述待发送数据的全部或部分数据之后,所述方法还包括:
通过用户线程,将所述待发送数据的全部或部分数据从所述用户线程的缓存区中删除。
8.根据权利要求5-7任一项所述的方法,其特征在于,所述方法还包括:
当所述第一电子设备与第二电子设备之间成功建立QUIC连接时,通过所述QUIC线程,为所述QUIC连接创建所述第二无锁缓存队列,所述第二无锁缓存队列的长度为预设长度。
9.一种数据处理装置,其特征在于,所述装置应用于第一电子设备的CPU,所述CPU运行有QUIC线程和用户线程,所述装置包括:
读取模块,用于通过所述QUIC线程,从第一UDP缓存区中获取待处理数据,并将所述待处理数据缓存在所述QUIC线程的QUIC缓存区;
存入模块,用于通过所述QUIC线程,将所述待处理数据的全部或部分数据存入第一无锁缓存队列,或者将指示所述待处理数据的全部或部分数据的第一指针存入所述第一无锁缓存队列;
发送模块,用于通过所述QUIC线程,向所述用户线程发送第一读通知;
读取模块,用于通过所述用户线程,响应于所述第一读通知,从所述第一无锁缓存队列中读取所述待处理数据的全部或部分数据,或者从所述第一无锁缓存队列中读取所述第一指针,基于所述第一指针从所述QUIC缓存区读取所述待处理数据的全部或部分数据。
10.一种电子设备,其特征在于,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;
存储器,用于存放计算机程序;
处理器,用于执行存储器上所存放的程序时,实现权利要求1-8任一所述的方法。
11.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现权利要求1-8任一所述的方法。
12.一种计算机程序产品,其特征在于,所述计算机程序产品包含可执行指令,当所述可执行指令在计算机上执行时,使得计算机实现权利要求1-8任一所述的方法。
CN202410332747.0A 2024-03-21 2024-03-21 一种数据处理方法、装置、电子设备及存储介质 Pending CN117938985A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202410332747.0A CN117938985A (zh) 2024-03-21 2024-03-21 一种数据处理方法、装置、电子设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202410332747.0A CN117938985A (zh) 2024-03-21 2024-03-21 一种数据处理方法、装置、电子设备及存储介质

Publications (1)

Publication Number Publication Date
CN117938985A true CN117938985A (zh) 2024-04-26

Family

ID=90752390

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202410332747.0A Pending CN117938985A (zh) 2024-03-21 2024-03-21 一种数据处理方法、装置、电子设备及存储介质

Country Status (1)

Country Link
CN (1) CN117938985A (zh)

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20200117605A1 (en) * 2018-12-20 2020-04-16 Intel Corporation Receive buffer management
CN115269213A (zh) * 2021-04-30 2022-11-01 腾讯科技(深圳)有限公司 数据接收方法、数据发送方法、装置、电子设备及介质
CN115396528A (zh) * 2022-08-17 2022-11-25 上海哔哩哔哩科技有限公司 基于协议族的quic数据传输方法及装置
CN116401077A (zh) * 2023-03-13 2023-07-07 天翼云科技有限公司 一种基于缓存队列的数据处理方法与相关装置
CN116708597A (zh) * 2023-08-04 2023-09-05 新华三技术有限公司 一种数据处理方法及装置

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20200117605A1 (en) * 2018-12-20 2020-04-16 Intel Corporation Receive buffer management
CN115269213A (zh) * 2021-04-30 2022-11-01 腾讯科技(深圳)有限公司 数据接收方法、数据发送方法、装置、电子设备及介质
CN115396528A (zh) * 2022-08-17 2022-11-25 上海哔哩哔哩科技有限公司 基于协议族的quic数据传输方法及装置
WO2024037296A1 (zh) * 2022-08-17 2024-02-22 上海哔哩哔哩科技有限公司 基于协议族的quic数据传输方法及装置
CN116401077A (zh) * 2023-03-13 2023-07-07 天翼云科技有限公司 一种基于缓存队列的数据处理方法与相关装置
CN116708597A (zh) * 2023-08-04 2023-09-05 新华三技术有限公司 一种数据处理方法及装置

Similar Documents

Publication Publication Date Title
EP3719657A1 (en) Communication with accelerator via rdma-based network adapter
CN109936510B (zh) 多路径rdma传输
JP4921569B2 (ja) オフロードユニットを使用したtcp接続のためのデータ処理
EP3482298B1 (en) Multicast apparatuses and methods for distributing data to multiple receivers in high-performance computing and cloud-based networks
US7571247B2 (en) Efficient send socket call handling by a transport layer
US6543005B1 (en) Transmitting data reliably and efficiently
WO2017032152A1 (zh) 将数据写入存储设备的方法及存储设备
CN113076281B (zh) 一种Ceph内核客户端进行通信的方法、系统、设备及介质
CN111459417A (zh) 一种面向NVMeoF存储网络的无锁传输方法及系统
CN113422793A (zh) 数据传输方法、装置、电子设备及计算机存储介质
TW201621699A (zh) 透過主動訊息支持遠端記憶體存取(rma)應用程式介面(api)
US10154079B2 (en) Pre-boot file transfer system
US20080263171A1 (en) Peripheral device that DMAS the same data to different locations in a computer
CN112688885A (zh) 一种报文处理方法及装置
CN111698274B (zh) 数据处理方法及装置
CN117938985A (zh) 一种数据处理方法、装置、电子设备及存储介质
JP6802295B2 (ja) 転送装置、転送方法及びプログラム
US7636313B2 (en) Use of internal buffer to reduce acknowledgement related delays in acknowledgement-based reliable communication protocols
US7330904B1 (en) Communication of control information and data in client/server systems
JP2019114947A (ja) 通信装置、通信装置の制御方法およびプログラム
CN109688085B (zh) 传输控制协议代理方法、存储介质及服务器
CN115801739A (zh) 数据传输方法、数据处理方法及设备、会议终端、介质
CN111314447A (zh) 代理服务器及其处理访问请求的方法
JP2008148181A (ja) 通信装置及び通信制御方法
JP2008099139A (ja) 通信方法

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