CN106685854B - 一种数据发送方法及系统 - Google Patents
一种数据发送方法及系统 Download PDFInfo
- Publication number
- CN106685854B CN106685854B CN201611130955.4A CN201611130955A CN106685854B CN 106685854 B CN106685854 B CN 106685854B CN 201611130955 A CN201611130955 A CN 201611130955A CN 106685854 B CN106685854 B CN 106685854B
- Authority
- CN
- China
- Prior art keywords
- queue
- data
- sub
- sending
- subdata
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/50—Queue scheduling
- H04L47/62—Queue scheduling characterised by scheduling criteria
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/104—Peer-to-peer [P2P] networks
- H04L67/1074—Peer-to-peer [P2P] networks for supporting data block transmission mechanisms
- H04L67/1078—Resource delivery mechanisms
- H04L67/108—Resource delivery mechanisms characterised by resources being split in blocks or fragments
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
- Communication Control (AREA)
Abstract
本发明公开了一种数据发送方法及系统,采用该数据发送方法将一份相同的数据(例如:某帧视频数据,某张图片)同时发送给多个连接时,只需要进行一次数据分片处理及相应操作,形成对应的数据包并依次传递各子数据端进行数据发送。因此本发明实施例提供的数据发送方法,相对于现有技术不需要每个连接单独处理TCP校验和计算,也不需要每个连接独立进行分片处理占用各自的缓存,从而可以减少对有效数据的重复操作和冗余操作,降低系统的额外开销,提高系统整体处理能力,也有利于降低嵌入式设备的运行功耗。
Description
技术领域
本发明涉及通信技术领域,尤其涉及一种数据发送方法及系统。
背景技术
目前,网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。建立网络通信连接至少需要一对端口号(socket)。socket本质是编程接口对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是socket编程接口,例如HTTP是轿车,提供了封装或者显示数据的具体形式,而Socket是发动机,提供了网络通信的能力。socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信。在互联网上的主机一般运行了多个服务软件,同时提供多种服务,每种服务都打开一个socket,并绑定到一个端口上,不同的端口对应于不同的服务,应用程序通常通过"套接字"向网络发出请求或者应答网络请求。
现有技术中,单个连接使用独立的socket,相同的数据发往多个socket连接时,独立处理,互不干涉。例如,互相几个独立的socket,假设它们都是TCP或UDP连接,这时我们需要逐个调用相同的方法将相同的一份数据传递给每个socket供其完成协议栈工作再通过网络接口发送。然而当把相同的数据同时发送到多个连接时,每个连接独立处理的步骤里,有些部分是重复处理,例如:TCP校验和计算;有些部分是冗余处理,例如:每个连接独立分片,申请/占用各自的缓存;这样当把一份相同的数据发往多个连接时,由于重复处理和冗余处理的存在,会造成系统非必要的额外开销以及运行功耗。
因此,如何降低一份相同数据发送给多个链接时的系统开销及运行功耗,提高系统整体的数据处理能力,是本领域技术人员亟待解决的问题。
发明内容
本发明实施例提供了一种数据发送方法及系统,用以解决现有技术中存在的把一份相同的数据发往多个连接时,由于重复处理和冗余处理的存在,造成系统非必要的额外开销以及运行功耗的问题。
本发明实施例提供了一种数据发送方法,包括:
主队列的队列头接收待发送的有效数据,并将所述待发送的有效数据进行分片处理形成数据包,且将所述数据包传递给所述主队列中的第一个子数据端;其中,所述主队列包括:队列头和多个建立有串行链接关系的子数据端;每个所述子数据端用于与接收设备建立连接进行数据处理及发送;
所述主队列中的每一个所述子数据端将接收到的所述数据包进行处理及发送后,传递给链接的下一个所述子数据端进行处理及发送,直至所述主队列的最后一个所述子数据端完成数据处理及发送。
在一种可能的实施方式中,本发明实施例提供的上述数据发送方法中,还包括:
至少一个子队列的队列头复制所述数据包,并将所述数据包传递给所述子队列中的第一个子数据端;其中,所述子队列包括:队列头和多个建立有串行链接关系的所述子数据端;所述子队列的队列头与所述主队列的队列头的数量之和小于或等于中央处理器的数量;
所述子队列中的每一个所述子数据端将接收到的所述数据包进行处理及发送后,传递给链接的下一个所述子数据端进行处理及发送,直至所述子队列的最后一个所述子数据端完成数据处理及发送。
在一种可能的实施方式中,本发明实施例提供的上述数据发送方法中,还包括:
所述主队列和所述子队列中的各所述子数据端,在完成数据处理及发送后获取与该所述子数据端链接的下一个所述子数据端的信息,并判断待接收所述数据包的子数据端是否具有对所述数据包进行处理及发送的能力,是则将所述数据包发送给所述子数据端进行处理及发送;否则将所述子数据端移动到该所述子数据端所在队列的队尾并标记,所述子数据端继续判断下一个待接收数据包的子数据端是否具有对所述数据包进行处理及发送的能力,直至判断出具有对所述数据包进行处理及发送能力的子数据端,将所述数据包发送给该所述子数据端进行处理及发送。
在一种可能的实施方式中,本发明实施例提供的上述数据发送方法中,还包括:
所述主队列中各所述子数据端将数据发送结果,反馈给所述主队列的队列头。
在一种可能的实施方式中,本发明实施例提供的上述数据发送方法中,还包括:
各所述子队列中的各所述子数据端将数据发送结果,反馈给各自所在的所述子队列的队列头;
各所述子队列的队列头将获得的所述反馈结果汇总,并发送给所述主队列的队列头。
本发明实施例提供了一种数据发送系统,包括:预先建立的用于处理及发送有效数据的主队列;其中,所述主队列包括:队列头和多个建立有串行链接关系的子数据端;每个所述子数据端用于与接收设备建立连接进行数据处理及发送;
所述主队列中的队列头用于接收待发送的有效数据,并将所述待发送的有效数据进行分片处理形成数据包,且将所述数据包传递给所述主队列中的第一个所述子数据端;
所述主队列中的每一个所述子数据端用于将接收到的所述数据包进行处理及发送后,传递给链接的下一个所述子数据端进行处理及发送,直至所述主队列的最后一个所述子数据端完成数据处理及发送。
在一种可能的实施方式中,本发明实施例提供的上述数据发送系统中,还包括:至少一个子队列;所述子队列包括:队列头和多个建立有串行连接关系的所述子数据端;所述子队列的队列头与所述主队列的队列头的数量之和小于或等于中央处理器的数量;
所述子队列的队列头用于复制所述数据包,并将所述数据包传递给所述子队列中的第一个所述子数据端;
所述子队列中的每一个所述子数据端用于将接收到的所述数据包进行处理及发送后,传递给链接的下一个所述子数据端进行处理及发送,直至所述子队列的最后一个所述子数据端完成数据处理及发送。
在一种可能的实施方式中,本发明实施例提供的上述数据发送系统中,各所述子数据端还用于:
在完成数据处理及发送后获取与该所述子数据端链接的下一个所述子数据端的信息,并判断待接收所述数据包的子数据端是否具有对所述数据包进行处理及发送的能力,是则将所述数据包发送给所述子数据端进行处理及发送;否则将所述子数据端移动到该所述子数据端所在队列的队尾并标记,所述子数据端继续判断下一个待接收数据包的子数据端是否具有对所述数据包进行处理及发送的能力,直至判断出具有对所述数据包进行处理及发送能力的子数据端,将所述数据包发送给该所述子数据端进行处理及发送。
在一种可能的实施方式中,本发明实施例提供的上述数据发送系统中,所述主队列的各所述子数据端,还用于:
将数据发送结果,反馈给所述主队列的队列头。
在一种可能的实施方式中,本发明实施例提供的上述数据发送系统中,所述子队列的各所述子数据端,还用于:
将数据发送结果,反馈给各自所在的所述子队列的队列头;
各所述子队列的队列头将获得的所述反馈结果汇总,并发送给所述主队列的队列头。
在一种可能的实施方式中,本发明实施例提供的上述数据发送系统中,还包括:创建模块;
所述创建模块用于创建接收及发送有效数据的主队列。
在一种可能的实施方式中,本发明实施例提供的上述数据发送系统中,所述创建模块,具体用于:
创建主队列的队列头和子数据端;
判断所述子数据端是否满足链接到所述主队列的队列头的约束条件,是则判断所述主队列的队列长度是否大于预设阈值,确定所述主队列的队列长度小于所述预设阈值时则将所述子数据端链接到所述主队列;否则拒绝链接所述子数据端到所述主队列。
在一种可能的实施方式中,本发明实施例提供的上述数据发送系统中,所述创建模块,还用于:
确定所述主队列的队列长度不小于所述预设阈值时,依次判断各所述子队列是否小于预设阈值;
若确定出一个小于所述预设阈值的所述子队列,则将所述子数据端链接到所述子队列;
若确定各所述子队列的队列长度不小于所述预设阈值,则判断所述子队列头的队列头与所述主队列的队列头的数量之和是否大于所述中央处理器的数量,是则将所述子数据端链接到队列长度最小的队列中;否则创建一个新的子队列,将所述子数据端链接到新的所述子队列中。
本发明实施例的有益效果包括:
本发明实施例提供了一种数据发送方法及系统,该数据发送方法包括:主队列的队列头接收待发送的有效数据,并将待发送的有效数据进行分片处理形成数据包,且将数据包传递给主队列中的第一个子数据端;其中,主队列包括:队列头和多个建立有串行链接关系的子数据端;每个子数据端用于与接收设备建立连接进行数据处理及发送;主队列中的每一个子数据端将接收到的数据包进行处理及发送后,传递给链接的下一个子数据端进行处理及发送,直至主队列的最后一个子数据端完成数据处理及发送。这样,将一份相同的数据(例如:某帧视频数据,某张图片)同时发送给多个连接时,只需要进行一次数据分片处理及相应操作,形成对应的数据包并依次传递各子数据端进行数据发送。因此本发明实施例提供的数据发送方法,相对于现有技术不需要每个连接单独处理TCP校验和计算,也不需要每个连接独立进行分片处理占用各自的缓存,从而可以减少对有效数据的重复操作和冗余操作,降低系统的额外开销,提高系统整体处理能力,也有利于降低嵌入式设备的运行功耗。
附图说明
图1为本发明实施例提供的数据发送方法的流程图;
图2为本发明实施例提供的队列调整示意图;
图3a和图3b分别为本发明实施例提供的数据发送过程示意图;
图4为本发明实施例提供的具体的数据发送方法流程图;
图5为本发明实施例提供的队列的创建方法流程图。
具体实施方式
下面结合附图,对本发明实施例提供的数据发送方法及系统的具体实施方式进行详细的说明。
本发明实施例提供了一种数据发送方法,如图1所示,可以包括以下步骤:
S101、主队列的队列头接收待发送的有效数据,并将待发送的有效数据进行分片处理形成数据包,且将数据包传递给主队列中的第一个子数据端;
其中,主队列包括:队列头和多个建立有串行链接关系的子数据端;每个子数据端用于与接收设备建立连接进行数据处理及发送;
S102、主队列中的每一个子数据端将接收到的数据包进行处理及发送后,传递给链接的下一个子数据端进行处理及发送,直至主队列的最后一个子数据端完成数据处理及发送。
本发明实施例提供的上述数据发送方法中,通过预先创建的主队列可以进行队列式发送数据,其中主队列的队列头为一个socket端口,以下实施例中均以sockQH表示,子数据端为用于建立连接的socket端口,以下实施例中由sockX表示,其与现有技术相同。该sockQH为一个特殊的socket,可以设定sockQH的协议族名称为PF_SockQH(PF:ProtocolFamily),它不和具体网络协议族绑定,但是它具有链接到它队列里的子数据端使用的网络协议族的公共特征属性,内存资源管理等;例如,最佳的最大传输单元MTU(MaximumTransmission Unit)值,即适合队列里所有sockX的MTU值,此值会影响如何对待发送的数据进行分片;是否需要计算分片数据的校验和,如果队列里的某个sockX是TCP连接,那么可能需要计算每个分片负载数据的校验和;缓存和重用分片和描述的内存资源。
在应用模块将待发送数据通过发送接口启动发送后,通过上述主队列实现队列式发送。首先依据sockQH的公共属性实现对数据进行分片处理,以及生成对每个分片的描述等操作,待发送数据处理后的分片和描述一起形成一个数据包,具体地,依据sockQH的公共属性将有效数据进行分片,为每个分片准备一个独立的描述,所有的分片和描述合为一个数据包,同时完成每个分片的预处理;此处分片的大小依据队列里所有sockX的MSS值;每对分片和描述仅在此处分配,后续每个sockX都共享使用它们,达到降低资源分配开销的目的;此处预处理依据队列里所有sockX的属性,例如是否需要计算每个分片有效数据的校验和,供队列里每个sockX共享使用此值,无需每个sockX再次计算校验和,计算量最小化,达到提高性能及降低功耗的目的。需要说明的是,因为有效数据太大,因此网络协议栈会对齐进行分片处理,分片大小值为MSS(Message Segment Size),例如:某TCPv4的MSS值是1500减去N-Bytes,因为它的传输链路是Ethernet,又因为Ethernet的MTU值设置为1500这个值,所以为了确保经过TCPv4处理后报文不再发送时再次分片处理,此处MSS+N-Bytes=MTU,其中N-Bytes是TCPv4协议栈数据头需要的大小。
这样本发明实施例提供的上述数据发送方法,将一份相同的数据(例如:某帧视频数据,某张图片)同时发送给多个连接时,只需要进行一次数据分片处理及相应操作,形成对应的数据包并通过各子数据端sockX建立的连接依次进行数据发送。因此本发明实施例提供的数据发送方法,相对于现有技术不需要每个连接单独处理TCP校验和计算,也不需要每个连接独立进行分片处理占用各自的缓存,从而可以减少对有效数据的重复操作和冗余操作,降低系统的额外开销,提高系统整体处理能力,也有利于降低嵌入式设备的运行功耗。
在具体实施时,本发明实施例提供的上述数据发送方法中,还可以包括:
至少一个子队列的队列头复制数据包,并将数据包传递给子队列中的第一个子数据端;其中,子队列包括:队列头和多个建立有串行链接关系的子数据端;子队列的队列头与主队列的队列头的数量之和小于或等于中央处理器的数量;
子队列中的每一个子数据端将接收到的数据包进行处理及发送后,传递给链接的下一个子数据端进行处理及发送,直至子队列的最后一个子数据端完成数据处理及发送。
具体地,本发明实施例提供的上述数据发送方法中,当加入到主队列里的sockX数量太多时,已达到主队列的队列长度阈值,此时会根据系统运行环境即中央处理器CPU核心的数量创建至少一个子队列,主队列的队列头sockQH依然是原来主队列的队列头,相应的还是其它新的子队列中子队列头的队列头;其中,主队列的队列头变为主队列头sockQH[0],子队列头则为sockQH[N],N为正整数。新创建的子队列的数量可以叫队列高度,依赖系统里CPU核心数量;例如在拥有四个CPU核心的环境里,队列高度的最大值等于“4”,即最多可以存在sockQH[0]、sockQH[1]、sockQH[2]sockQH[3]四个队列,其中sockQH[0]是主队列头,其余是子队列头。
具体地,子队列的创建依赖环境里CPU核心的数量,这样是为了利用每个CPU核心独立处理各个队列,达到并发处理的效果;此处之所以在主队列的长度达到阈值之后再创建子队列,是为了抵消因创建子队列而产生的额外开销;主队列的长度可以是一个预设值的常数(例如:32)。若同一份数据需要发往更多的连接时,主队列的的长度已达到阈值,无法再添加更多的sockX,此时通过创建子队列可以实现将有效数据发往更多的连接。子队列与主队列可以通过不同的CPU处理,多个子队列头sockQH[N]由多个不同的CPU处理,即主队列头sockQH[0]和每个子队列头sockQH[N]都同时在不同的CPU并行处理,主队列头sockQH[0]和子队列头sockQH[N]的总数量小于等于CPU的数量。每个子队列头sockQH[N]克隆数据包中的数据分片,生成对应的描述,从主队列头sockQH[0]的对应分片描述里获取和更新部分公共内容(例如:分片数据的校验和),形成自己的发送数据包,进而将数据包传递给子队列中的第一个子数据端,子队列中的每一个子数据端将接收到的数据包进行处理及发送后,传递给链接的下一个子数据端进行处理及发送,直至子队列的最后一个子数据端完成数据处理及发送。
在具体实施时,本发明实施例提供的上述数据发送方法中,还包括:
主队列和子队列中的各子数据端,在完成数据处理及发送后获取与该子数据端链接的下一个子数据端的信息,并判断待接收数据包的子数据端是否具有对数据包进行处理及发送的能力,是则将数据包发送给子数据端进行处理及发送;否则将子数据端移动到该子数据端所在队列的队尾并标记,子数据端继续判断下一个待接收数据包的子数据端是否具有对数据包进行处理及发送的能力,直至判断出具有对数据包进行处理及发送能力的子数据端,将数据包发送给该子数据端进行处理及发送。
具体地,本发明实施例提供的上述数据发送方法中,数据包传递过程中,还需要判定待接收数据包的子数据端是否具有处理该数据包的能力,是则将数据包传递给当前能处理的发送连接sockX,暂时无法处理的发送连接sockX推迟处理。此处主队列头sockQH[0]和子队列头sockQH[N]在不同的处理器核心并发处理;此处依次是按照各自列表里成员的顺序依次逐个处理;针对每个发送连接,先检查它当前是否有单次处理完一个数据包的能力(例如:该连接sockX能够容纳的分片数少于该数据包里的分片数即判断该连接sockX暂时不能处理);暂时无法处理的发送连接sockX推迟处理的方式为可以将此连接sockX放置到的末尾,也可以是其它方式如表示待再次处理。
具体地,如图2所示,其中Desc-N为对应数据分片的描述,Seg-N为数据分片,数据分片与对应的描述合为一个数据包Group-Y。如果sockX暂时没有单次处理完数据包的能力,那么将sockA从当前位置移动到队列末尾,并设置标签表示它在此轮发送中已经“懒惰”一次;队列调整后继续处理,当再次遇到sockX,如果那时候它已经能单次处理完数据包,那么就交付它处理,如果那时候sockX既已经“懒惰”一次,还不能再次处理,则会跳过此轮处理;sockQH返回给应用的结果里会反应出“懒惰”情况出现,应用可以通过命令获取哪些sockX出现“病情”,采取符合业务的处理,例如从队列中摘除某sockX,关闭相应连接等。也可以再次尝试推迟处理的sockX,能再次处理则处理,不能再次处理依据设置确定其行为:此处依据设置是指某个sockX的独立设置,例如该sockX设置为“非阻塞(NONBLOCK)”时再次尝试处理它依然无法处理时即会放弃此sockX的数据发送;可以将某个sockX设置为“阻塞(BLOCK)”模式,再次尝试失败,依然设置为待发送,放置到待处理的位置;还可以将某个sockX设置为“尝试数次(Try-N)”模式,即尝试N次,此模式介于NONBLOCK和BLOCK之间。
在具体实施时,本发明实施例提供的上述数据发送方法中,如图3a和图3b所示,将数据包传递给sockA处理和发送;sockA开始处理数据包前会获取它的处理独占权限,此处理独占权限表示sockA当前独占数据包,满足排它性操作的需求;sockA完成处理及发送后,释放处理数据包的独占权限;sockA完成处理及发送,将数据包传递给sockB处理和发送;sockB开始处理前获取处理独占权限,完成发送后释放独占权限;sockB完成处理及发送,将数据包传递给队列中后续sockX处理和发送;每个sockX开始处理前获取处理独占权限,完成发送后释放独占权限,直至队列中最后一个sockX。其中图3b中也示意了子队列实现数据发送的过程,其实现原理与上述主队列相同,在此不做详述。
需要说明的是,在主队列中,所有sockX完成依赖,则通知sockQH解除依赖;此处所谓的依赖,本质原因来自sockX的协议栈属性,例如TCP协议存在重发机制,那么当sockX完成处理和发送后,需要等待连接对端确认才知道是否需要重发哪些分片,此案中sockA完成处理和发送后立即会将数据包传递给队列后续sockB,这么实现为了满足低时延的应用需求,所以此时sockA在未得到连接对端确认之前,对数据包的所有分片都处于依赖状态,只有得到连接对端确认时才会解除依赖并通知sockQH;如果需要重发,那么sockA需要再次得到数据包的处理独占权限,从数据包中挑选必要的分片进行重发,直到最终解除对数据包的依赖;如果sockX的协议栈属性无依赖特征,例如UDP协议即无此依赖,那么sockX处理和发送完成后,立即可以通知sockQH解除依赖;sockQH检测到数据包的所有依赖都解除后,才能释放或再利用数据包里的资源。
在具体实施时,本发明实施例提供的上述数据发送方法中,还可以包括:主队列中各子数据端将数据发送结果,反馈给主队列的队列头;各子队列中的各子数据端将数据发送结果,反馈给各自所在的子队列的队列头;各子队列的队列头将获得的反馈结果汇总,并发送给主队列的队列头。具体地,各队列中已经完成处理发送数据的连接sockX,将结果反馈给各自的主/子队列头sockQH[0]/sockQH[N],必要时申请是否再次处理,即已经处理的发送连接需要把自己的最终结果反馈给各自的队列头,即该数据包在具体某个连接的最终结果,如果成功则同时解除依赖;如果该连接检测到异常,例如某个分片需要重传,那么会申请队列头再次将此数据包交给该连接处理,直到成功或失败。子队列头汇总自身所有处理结果,并汇总给主队列头,所有子队列的处理结果都汇总到主队列头,主队列头也必须等待所有子队列头反馈所有的处理结果,主队列头汇总所有处理结果,并将结果反馈给应用模块。
下面以一个具体实施例来说明通过队列实现数据发送的过程,如图4所示,可以具体包括:
S21、应用模块启动发送有效数据;
S22、根据主队列头的公共属性对有效数据进行分片处理及操作,形成数据包,克隆数据包中的数据分片并形成对应各子队列头的的数据包;
S23、主队列和各子队列分别将各自的数据包传递给队列中的第一个子数据端进行处理及发送,同一队列的各子数据端依次传递,完成数据处理及发送;暂时无法处理数据的子数据端则推迟处理;
S24、再次将数据包传递给推迟处理数据的子数据端,能完成数据处理的则完成数据处理及发送,不能完成数据处理的则依据设置确定其行为;
S25、判断所有子数据端连接是否全部完成数据处理及发送,是则执行步骤S26、否则执行步骤S24;
S26、完成数据处理及发送的子数据端将结果反馈给对应的队列头,必要时可申请再次处理及发送数据;各子队列头将反馈结果汇总反馈给主队列头,主队列头将反馈结果汇总反馈给应用模块。
在具体实施时,本发明实施例提供的上述数据发送方法中,步骤S101可以具体包括:
创建主队列头数据端和子数据端;其中,主队列头数据端具有链接子数据端而使用的网络协议族公共特征属性及内存资源管理特性;具体地,创建主队列头数据端sockQH用于链接各子数据端sockX形成队列,创建子数据端sockX用于建立发送连接,实现数据发送;
判断子数据端是否满足链接到主队列头数据端的约束条件,是则判断主队列的长度是否大于预设阈值,确定主队列的长度小于预设阈值时则将子数据端添加到主队列;否则拒绝添加子数据端到主队列。具体地,新创建的sockQH本身没有约束条件,约束条件来自每次新的sockX的加入及每次成功加入后的调整;例如第一次加入sockQH的sock1的链路MTU值是1500,那么此值会成为一个约束条件,第二次尝试加入sockQH的sock2的链路MTU值是32000,那么它抵触目前sockQH的约束条件,因为MTU值会影响sockQH对数据分片的处理,只有加入在sockQH里的所有sockX大小一致才能正确处理,所以此时sockQH会拒绝添加sock2。每次加入一个sockX,主队列的长度增加,每次移出一个sockX,长度减少。主队列的长度为预设阈值Length,这个值可以预设(例如:32),预设值的依据来自目标系统单核CPU协议栈处理和网络硬件设备发送完整过程的测定数据;确定当前的主队列长度小于预设阈值,就可以将将待添加的sockX加入到主队列。需要说明的是,子队列添加子数据端的方式与主队列相同,在此不作详述。
在具体实施时,本发明实施例提供的上述数据发送方法中,还可以包括:确定主队列的长度不小于预设阈值时,根据子队列的队列信息依次判断各子队列是否小于预设阈值;若确定出一个小于预设阈值的子队列,则将子数据端添加到子队列;若确定各子队列的长度不小于预设阈值,则判断子队列头数据端与主队列头数据端的数量之和是否大于中央处理器的数量,是则将子数据端添加到长度最小的队列中,此处长度最短的队列指的所有队列中长度最短的队列,包括主队列与子队列;否则创建一个新的子队列,将子数据端添加到新的子队列。
基于同一发明思想,本发明实施例提供了一种数据发送系统,可以包括:预先建立的用于处理及发送有效数据的主队列;其中,主队列包括:队列头和多个建立有串行链接关系的子数据端;每个子数据端用于与接收设备建立连接进行数据处理及发送;
主队列中的队列头用于接收待发送的有效数据,并将待发送的有效数据进行分片处理形成数据包,且将数据包传递给主队列中的第一个子数据端;
主队列中的每一个子数据端用于将接收到的数据包进行处理及发送后,传递给链接的下一个子数据端进行处理及发送,直至主队列的最后一个子数据端完成数据处理及发送。
在具体实施时,本发明实施例提供的上述数据发送系统中,还可以包括:至少一个子队列;
子队列包括:队列头和多个建立有串行连接关系的子数据端;子队列的队列头与主队列的队列头的数量之和小于或等于中央处理器的数量;
子队列的队列头用于复制数据包,并将数据包传递给子队列中的第一个子数据端;
子队列中的每一个子数据端用于将接收到的数据包进行处理及发送后,传递给链接的下一个子数据端进行处理及发送,直至子队列的最后一个子数据端完成数据处理及发送。
在具体实施时,本发明实施例提供的上述数据发送系统中,各子数据端还用于:
在完成数据处理及发送后获取与该子数据端链接的下一个子数据端的信息,并判断待接收数据包的子数据端是否具有对数据包进行处理及发送的能力,是则将数据包发送给子数据端进行处理及发送;否则将子数据端移动到该子数据端所在队列的队尾并标记,子数据端继续判断下一个待接收数据包的子数据端是否具有对数据包进行处理及发送的能力,直至判断出具有对数据包进行处理及发送能力的子数据端,将数据包发送给该子数据端进行处理及发送。
在具体实施时,本发明实施例提供的上述数据发送系统中,主队列的各子数据端,还用于:
将数据发送结果,反馈给主队列的队列头。
在具体实施时,本发明实施例提供的上述数据发送系统中,子队列的各所述子数据端,还用于:将数据发送结果,反馈给各自所在的子队列的队列头;各子队列的队列头将获得的反馈结果汇总,并发送给主队列的队列头。
在具体实施时,本发明实施例提供的上述数据发送系统中,还可以包括:创建模块;创建模块用于创建接收及发送有效数据的主队列。
在具体实施时,本发明实施例提供的上述数据发送系统中,创建模块,具体用于:
创建主队列的队列头和子数据端;
判断子数据端是否满足链接到主队列的队列头的约束条件,是则判断主队列的队列长度是否大于预设阈值,确定所队列的队列长度小于预设阈值时则将子数据端链接到主队列;否则拒绝链接子数据端到主队列。
在具体实施时,本发明实施例提供的上述数据发送系统中,创建模块,还用于:
确定主队列的队列长度不小于预设阈值时,依次判断各子队列是否小于预设阈值;
若确定出一个小于预设阈值的子队列,则将子数据端链接到子队列;
若确定各子队列的队列长度不小于预设阈值,则判断子队列头的队列头与主队列的队列头的数量之和是否大于中央处理器的数量,是则将子数据端链接到队列长度最小的队列中;否则创建一个新的子队列,将子数据端链接到新的子队列中。
下面以一个具体实施例说明主队列与子队列的创建过程,如图5所示,具体步骤如下:
S11、创建主队列头和子数据端;
S12、判断子数据端是否满足约束条件,是则执行步骤S13,否则执行步骤S14;
S13、判断主队列的长度是否大于预设阈值,是则执行步骤S15,否则执行步骤S16;
S14、拒绝添该子数据端;
S15、判断子队列的长度是否大于阈值,是则执行步骤S17,否则执行步骤S18;
S16、将子数据端添加到主队列;
S17、判断子队列头与主队列头的数量之和是否大于中央处理器的数量,是则执行步骤S19;否则执行步骤S20;
S18、将子数据端添加到该子队列;
S19、将子数据端添加到长度最短的队列中。
S20、创建新的子队列,将子数据端添加到新创建的子队列。
本发明实施例提供了一种数据发送方法及系统,该数据发送方法包括:主队列的队列头接收待发送的有效数据,并将待发送的有效数据进行分片处理形成数据包,且将数据包传递给主队列中的第一个子数据端;其中,主队列包括:队列头和多个建立有串行链接关系的子数据端;每个子数据端用于与接收设备建立连接进行数据处理及发送;主队列中的每一个子数据端将接收到的数据包进行处理及发送后,传递给链接的下一个子数据端进行处理及发送,直至主队列的最后一个子数据端完成数据处理及发送。这样,将一份相同的数据(例如:某帧视频数据,某张图片)同时发送给多个连接时,只需要进行一次数据分片处理及相应操作,形成对应的数据包并依次传递各子数据端进行数据发送。因此本发明实施例提供的数据发送方法,相对于现有技术不需要每个连接单独处理TCP校验和计算,也不需要每个连接独立进行分片处理占用各自的缓存,从而可以减少对有效数据的重复操作和冗余操作,降低系统的额外开销,提高系统整体处理能力,也有利于降低嵌入式设备的运行功耗。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
Claims (13)
1.一种数据发送方法,其特征在于,包括:
主队列的队列头接收待发送的有效数据,并将所述待发送的有效数据进行分片处理形成数据包,且将所述数据包传递给所述主队列中的第一个子数据端;其中,所述主队列包括:队列头和多个建立有串行链接关系的子数据端;每个所述子数据端用于与接收设备建立连接进行数据处理及发送;
所述主队列中的每一个所述子数据端将接收到的所述数据包进行处理及发送后,将所述数据包传递给链接的下一个所述子数据端进行处理及发送,直至所述主队列的最后一个所述子数据端完成数据处理及发送。
2.如权利要求1所述的数据发送方法,其特征在于,还包括:
至少一个子队列的队列头复制所述数据包,并将所述数据包传递给所述子队列中的第一个子数据端;其中,所述子队列包括:队列头和多个建立有串行链接关系的所述子数据端;所述子队列的队列头与所述主队列的队列头的数量之和小于或等于中央处理器的数量;
所述子队列中的每一个所述子数据端将接收到的所述数据包进行处理及发送后,传递给链接的下一个所述子数据端进行处理及发送,直至所述子队列的最后一个所述子数据端完成数据处理及发送;
其中,当加入到主队列里的子数据端已达到主队列的队列长度阈值时,创建至少一个子队列。
3.如权利要求2所述的数据发送方法,其特征在于,还包括:
所述主队列和所述子队列中的各所述子数据端,在完成数据处理及发送后获取与该所述子数据端链接的下一个所述子数据端的信息,并判断待接收所述数据包的子数据端是否具有对所述数据包进行处理及发送的能力,是则将所述数据包发送给所述子数据端进行处理及发送;否则将所述子数据端移动到该所述子数据端所在队列的队尾并标记,所述子数据端继续判断下一个待接收数据包的子数据端是否具有对所述数据包进行处理及发送的能力,直至判断出具有对所述数据包进行处理及发送能力的子数据端,将所述数据包发送给该所述子数据端进行处理及发送。
4.如权利要求1-3任一项所述的数据发送方法,其特征在于,还包括:
所述主队列中各所述子数据端将数据发送结果,反馈给所述主队列的队列头。
5.如权利要求4所述的数据发送方法,其特征在于,还包括:
各所述子队列中的各所述子数据端将数据发送结果,反馈给各自所在的所述子队列的队列头;
各所述子队列的队列头将获得的所述反馈结果汇总,并发送给所述主队列的队列头。
6.一种数据发送系统,其特征在于,包括:预先建立的用于处理及发送有效数据的主队列;其中,所述主队列包括:队列头和多个建立有串行链接关系的子数据端;每个所述子数据端用于与接收设备建立连接进行数据处理及发送;
所述主队列中的队列头用于接收待发送的有效数据,并将所述待发送的有效数据进行分片处理形成数据包,且将所述数据包传递给所述主队列中的第一个所述子数据端;
所述主队列中的每一个所述子数据端用于将接收到的所述数据包进行处理及发送后,将所述数据包传递给链接的下一个所述子数据端进行处理及发送,直至所述主队列的最后一个所述子数据端完成数据处理及发送;
其中,队列头为一个socket端口,子数据端为用于建立连接的socket端口。
7.如权利要求6所述的数据发送系统,其特征在于,还包括:至少一个子队列;所述子队列包括:队列头和多个建立有串行连接关系的所述子数据端;所述子队列的队列头与所述主队列的队列头的数量之和小于或等于中央处理器的数量;
所述子队列的队列头用于复制所述数据包,并将所述数据包传递给所述子队列中的第一个所述子数据端;
所述子队列中的每一个所述子数据端用于将接收到的所述数据包进行处理及发送后,传递给链接的下一个所述子数据端进行处理及发送,直至所述子队列的最后一个所述子数据端完成数据处理及发送。
8.如权利要求7所述的数据发送系统,其特征在于,各所述子数据端还用于:
在完成数据处理及发送后获取与该所述子数据端链接的下一个所述子数据端的信息,并判断待接收所述数据包的子数据端是否具有对所述数据包进行处理及发送的能力,是则将所述数据包发送给所述子数据端进行处理及发送;否则将所述子数据端移动到该所述子数据端所在队列的队尾并标记,所述子数据端继续判断下一个待接收数据包的子数据端是否具有对所述数据包进行处理及发送的能力,直至判断出具有对所述数据包进行处理及发送能力的子数据端,将所述数据包发送给该所述子数据端进行处理及发送。
9.如权利要求6-8任一项所述的数据发送系统,其特征在于,所述主队列的各所述子数据端,还用于:
将数据发送结果,反馈给所述主队列的队列头。
10.如权利要求9所述的数据发送系统,其特征在于,所述子队列的各所述子数据端,还用于:
将数据发送结果,反馈给各自所在的所述子队列的队列头;
各所述子队列的队列头将获得的所述反馈结果汇总,并发送给所述主队列的队列头。
11.如权利要求6-8任一项所述的数据发送系统,其特征在于,还包括:创建模块;
所述创建模块用于创建接收及发送有效数据的主队列。
12.如权利要求11所述的数据发送系统,其特征在于,所述创建模块,具体用于:
创建主队列的队列头和子数据端;
判断所述子数据端是否满足链接到所述主队列的队列头的约束条件,是则判断所述主队列的队列长度是否大于预设阈值,确定所述主队列的队列长度小于所述预设阈值时则将所述子数据端链接到所述主队列;否则拒绝链接所述子数据端到所述主队列。
13.如权利要求12所述的数据发送系统,其特征在于,所述创建模块,还用于:
确定所述主队列的队列长度不小于所述预设阈值时,依次判断各所述子队列是否小于预设阈值;
若确定出一个小于所述预设阈值的所述子队列,则将所述子数据端链接到所述子队列;
若确定各所述子队列的队列长度不小于所述预设阈值,则判断所述子队列头的队列头与所述主队列的队列头的数量之和是否大于所述中央处理器的数量,是则将所述子数据端链接到队列长度最小的队列中;否则创建一个新的子队列,将所述子数据端链接到新的所述子队列中。
Priority Applications (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611130955.4A CN106685854B (zh) | 2016-12-09 | 2016-12-09 | 一种数据发送方法及系统 |
EP17878642.2A EP3535956B1 (en) | 2016-12-09 | 2017-11-29 | Methods and systems for data transmission |
PCT/CN2017/113597 WO2018103565A1 (en) | 2016-12-09 | 2017-11-29 | Methods and systems for data transmission |
US16/433,154 US11012366B2 (en) | 2016-12-09 | 2019-06-06 | Methods and systems for data transmission |
US17/233,426 US11570120B2 (en) | 2016-12-09 | 2021-04-16 | Methods and systems for data transmission |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611130955.4A CN106685854B (zh) | 2016-12-09 | 2016-12-09 | 一种数据发送方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106685854A CN106685854A (zh) | 2017-05-17 |
CN106685854B true CN106685854B (zh) | 2020-02-14 |
Family
ID=58868568
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201611130955.4A Active CN106685854B (zh) | 2016-12-09 | 2016-12-09 | 一种数据发送方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106685854B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2018103565A1 (en) * | 2016-12-09 | 2018-06-14 | Zhejiang Dahua Technology Co., Ltd. | Methods and systems for data transmission |
CN108494676B (zh) * | 2018-03-21 | 2022-01-11 | 广州多益网络股份有限公司 | 数据传输方法、装置、数据收发设备、系统及存储介质 |
CN109062708B (zh) * | 2018-07-05 | 2020-07-10 | 武汉斗鱼网络科技有限公司 | 一种数据发送方法、接收方法及装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101419562A (zh) * | 2008-12-04 | 2009-04-29 | 浙江大学 | 平衡负载与性能的硬件优先级队列实现方法 |
CN102480430A (zh) * | 2010-11-24 | 2012-05-30 | 迈普通信技术股份有限公司 | 实现报文保序的方法和装置 |
CN105577560A (zh) * | 2016-02-04 | 2016-05-11 | 豪威科技(上海)有限公司 | 数据包、数据传输系统及方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7089335B2 (en) * | 2000-10-30 | 2006-08-08 | Microsoft Corporation | Bridging multiple network segments and exposing the multiple network segments as a single network to a higher level networking software on a bridging computing device |
-
2016
- 2016-12-09 CN CN201611130955.4A patent/CN106685854B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101419562A (zh) * | 2008-12-04 | 2009-04-29 | 浙江大学 | 平衡负载与性能的硬件优先级队列实现方法 |
CN102480430A (zh) * | 2010-11-24 | 2012-05-30 | 迈普通信技术股份有限公司 | 实现报文保序的方法和装置 |
CN105577560A (zh) * | 2016-02-04 | 2016-05-11 | 豪威科技(上海)有限公司 | 数据包、数据传输系统及方法 |
Also Published As
Publication number | Publication date |
---|---|
CN106685854A (zh) | 2017-05-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10652367B2 (en) | Reducing network latency | |
US11095758B2 (en) | Methods and apparatus for virtualized hardware optimizations for user space networking | |
US6246683B1 (en) | Receive processing with network protocol bypass | |
US10355997B2 (en) | System and method for improving TCP performance in virtualized environments | |
US8751682B2 (en) | Data transfer using high speed connection, high integrity connection, and descriptor | |
CN104580011B (zh) | 一种数据转发装置和方法 | |
CN106685854B (zh) | 一种数据发送方法及系统 | |
US20120079001A1 (en) | High speed parallel data exchange with receiver side data handling | |
US20140281390A1 (en) | System and method for ordering packet transfers in a data processor | |
CN109547519B (zh) | 反向代理方法、装置及计算机可读存储介质 | |
US8745235B2 (en) | Networking system call data division for zero copy operations | |
CN102792638B (zh) | 以避免通信协议栈卷入的方式向设备发出至少一部分分组有效载荷的网络控制器电路 | |
US7213074B2 (en) | Method using receive and transmit protocol aware logic modules for confirming checksum values stored in network packet | |
CN112118594A (zh) | 数据上传方法、下载方法、电子设备及存储介质 | |
CN111404986A (zh) | 数据传输处理方法、设备和存储介质 | |
US7444432B2 (en) | System and method for an efficient transport layer transmit interface | |
JP4415391B2 (ja) | データをネットワークに送信する方法及び装置並びにデータをネットワークから受信する方法及び装置 | |
KR100932968B1 (ko) | 호스트 컴퓨터의 개입이 없는 toe의 tcp 재전송 처리방법 | |
KR101504191B1 (ko) | 패킷 스니핑을 이용한 분산 처리 시스템 및 그 방법 | |
CN118118513A (zh) | 一种基于逆传递的配电物联网远程升级方法、装置及介质 | |
CN113965627A (zh) | 一种发送数据的方法、低延时接收数据的方法及相关装置 | |
CN114116239A (zh) | 一种引用参数的传输方法及远程过程调用方法 | |
KR20060090810A (ko) | 단일 접속과 장애 극복 대칭 다중 계산 시스템을 통한 그룹대 그룹 통신 방법 및 장치 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |