CN113672406B - 数据传输处理方法、装置、电子设备及存储介质 - Google Patents
数据传输处理方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN113672406B CN113672406B CN202110973967.8A CN202110973967A CN113672406B CN 113672406 B CN113672406 B CN 113672406B CN 202110973967 A CN202110973967 A CN 202110973967A CN 113672406 B CN113672406 B CN 113672406B
- Authority
- CN
- China
- Prior art keywords
- queue
- thread
- annular
- target
- writing
- 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
- 230000005540 biological transmission Effects 0.000 title claims abstract description 40
- 238000003672 processing method Methods 0.000 title claims abstract description 19
- 238000000034 method Methods 0.000 claims abstract description 54
- 238000012545 processing Methods 0.000 claims abstract description 31
- 230000008569 process Effects 0.000 claims description 27
- 238000004590 computer program Methods 0.000 claims description 9
- 230000006854 communication Effects 0.000 description 20
- 238000004891 communication Methods 0.000 description 19
- 238000010586 diagram Methods 0.000 description 8
- FFBHFFJDDLITSX-UHFFFAOYSA-N benzyl N-[2-hydroxy-4-(3-oxomorpholin-4-yl)phenyl]carbamate Chemical compound OC1=C(NC(=O)OCC2=CC=CC=C2)C=CC(=C1)N1CCOCC1=O FFBHFFJDDLITSX-UHFFFAOYSA-N 0.000 description 4
- 230000006870 function Effects 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 241001522296 Erithacus rubecula Species 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/544—Buffers; Shared memory; Pipes
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Transfer Systems (AREA)
Abstract
本申请提供一种数据传输处理方法、装置、电子设备及存储介质。方法包括:在写线程调用消息发送接口时,判断消息发送接口的线程局部变量是否为第一预设值;当线程局部变量为第一预设值时,通过写线程向队列池中的目标第一环形队列写入待传输数据,第一预设值表征已建立目标第一环形队列与写线程、目标第一环形队列与读线程的连接,队列池预先设置于电子设备的共享内存中,目标第一环形队列为无锁队列。由于第一环形队列未加锁,可以节省加锁、解锁的时间,如此,可以提高数据写入、读取输出的效率。
Description
技术领域
本申请涉及数据通信领域,具体而言,涉及一种数据传输处理方法、装置、电子设备及存储介质。
背景技术
Linux系统进程间进行进程间通信的方式包括消息队列,该通信方式属于系统调用,由Linux内核提供服务。针对每次系统调用,在每次被调用时都需要从用户态切换到内核态,在任务期间发生切换需要花费较多的时间用于处理诸如:保存和恢复寄存器和内存页表、对消息队列加锁/解锁等,如此,会影响数据并发传输性能。
发明内容
本申请实施例的目的在于提供一种数据传输处理方法、装置、电子设备及存储介质,能够提高数据并发传输的性能。
为了实现上述目的,本申请的实施例通过如下方式实现:
第一方面,本申请实施例提供一种数据传输处理方法,所述方法包括:
在写线程调用消息发送接口时,判断所述消息发送接口的线程局部变量是否为第一预设值;
当所述线程局部变量为第一预设值时,通过所述写线程向所述写线程所对应的目标第一环形队列写入待传输数据,所述第一预设值表征已建立所述目标第一环形队列与所述写线程、所述目标第一环形队列与读线程的连接,其中,所述读线程预先打开有所述写线程在电子设备的共享内存中创建的所述目标第一环形队列,且所述目标第一环形队列已被加入到所述读线程的队列池中,且所述目标第一环形队列为无锁队列。
在上述的实施方式中,通过消息发送接口的线程局部变量,可以自动检测是否完成连接的建立,后续传输数据时,便向预先加入队列池的无锁的第一环形队列写入数据,由于第一环形队列未加锁,可以节省加锁、解锁的时间,如此,有利于提高数据写入、读取输出的效率。
结合第一方面,在一些可选的实施方式,所述方法还包括:
通过所述读线程轮询读取所述队列池中的所有第一环形队列中的数据,所述所有第一环形队列包括所述目标第一环形队列。
在上述的实施方式中,由于队列池中的第一环形队列未加锁,读数据时无需解锁,从而有利于提高读数据的效率。
结合第一方面,在一些可选的实施方式,在通过所述写线程向所述写线程所对应的目标第一环形队列写入待传输数据之前,所述方法还包括:
当所述线程局部变量为第二预设值时,通过所述读线程在所述共享内存中创建的第二环形队列,将所述写线程所创建的目标第一环形队列的标识信息输出至所述读线程,所述第二预设值表征未建立所述目标第一环形队列与所述读线程的连接;
根据所述标识信息,通过所述读线程将所述目标第一环形队列加入所述队列池,以建立所述读线程与所述目标第一环形队列的连接,并将所述消息发送接口的线程局部变量设置为所述第一预设值。
在上述的实施方式中,基于线程局部变量,可以在首次调用消息发送接口时,自动创建读线程与第一环形队列的连接,从而简化操作。
结合第一方面,在一些可选的实施方式,所述第二环形队列为有锁队列,所述第二环形队列用于在任一目标写线程向所述第二环形队列写入数据期间,阻止除去所述目标写线程之外的其他写线程向所述第二环形队列写入数据。
结合第一方面,在一些可选的实施方式,当所述线程局部变量为第一预设值时,通过所述写线程向队列池中的目标目标第一环形队列写入待传输数据,包括:
当所述线程局部变量为所述第一预设值时,且与所述写线程对应的第一环形队列未写满数据时,将所述写线程对应的第一环形队列作为所述目标第一环形队列,并通过所述写线程向所述目标第一环形队列写入待传输数据;
或者,当所述线程局部变量为所述第一预设值时,且与所述写线程对应的第一环形队列写满数据时,创建新的第一环形队列以作为所述目标第一环形队列,并通过所述写线程向所述目标第一环形队列写入待传输数据,其中,当所述写线程中的在创建所述新的第一环形队列之前的第一环形队列中的数据被读取完时,所述读线程将所述新的第一环形队列加入至所述队列池。
在上述的实施方式中,通过在队列满时自动扩展环形队列,如此,有利于在不耽搁数据写操作效率的情况下进行数据并发通信。
结合第一方面,在一些可选的实施方式,所述方法还包括:
当在任一写线程对应的多个第一环形队列中存在闲置队列时,从所述队列池中删除所述闲置队列,所述闲置队列为在预设时长内未被写入数据且不是目标队列编号的第一环形队列;
或者,在任一写线程对应的多个第一环形队列中,保留创建时间最晚的第一环形队列,并删除被所述读线程读取完数据的其他第一环形队列,所述其他第一环形队列为所述多个第一环形队列中除去所述创建时间最晚的第一环形队列之外的第一环形队列。
在上述的实施方式中,通过删除闲置队列,可以自动实现系统资源的回收,降低系统资源的消耗。
结合第一方面,在一些可选的实施方式,通过所述读线程轮询读取所述队列池中的所有第一环形队列中的数据,包括:
针对所述队列池中所有的第一环形队列,通过所述读线程按照设定顺序依次读取每个第一环形队列中的相同预设数量的数据。
在上述的实施方式中,通过读相同预设数量的数据,可以针对不同环形队列实现读操作的均衡读处理。
结合第一方面,在一些可选的实施方式,所述队列池包括与多个写进程对应的第一环形队列,其中,每个写进程包括至少一个写线程,每个写线程对应至少一个第一环形队列,所述队列池中的每个第一环形队列与所述读线程连接。
第二方面,本申请实施例还提供一种数据传输处理装置,所述装置包括:
判断单元,用于在写线程调用消息发送接口时,判断所述消息发送接口的线程局部变量是否为第一预设值;
数据写入单元,用于当所述线程局部变量为第一预设值时,通过所述写线程向所述写线程所对应的目标第一环形队列写入待传输数据,所述第一预设值表征已建立所述目标第一环形队列与所述写线程、所述目标第一环形队列与读线程的连接,其中,所述读线程预先打开有所述写线程在电子设备的共享内存中创建的所述目标第一环形队列,且所述目标第一环形队列已被加入到所述读线程的队列池中,且所述目标第一环形队列为无锁队列。
第三方面,本申请实施例还提供一种电子设备,所述电子设备包括相互耦合的处理器及存储器,所述存储器内存储计算机程序,当所述计算机程序被所述处理器执行时,使得所述电子设备执行上述的方法。
第四方面,本申请实施例还提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,当所述计算机程序在计算机上运行时,使得所述计算机执行上述的方法。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对本申请实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为本申请实施例提供的电子设备的结构示意图。
图2为本申请实施例提供的数据传输处理方法的流程示意图。
图3为本申请实施例提供的数据传输处理方法对应的通信框架结构的示意图。
图4为本申请实施例提供的数据传输处理装置的框图。
图标:10-电子设备;11-处理模块;12-存储模块;13-通信模块;14-共享内存;200-数据传输处理装置;210-判断单元;220-数据写入单元。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。需要说明的是,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。在不冲突的情况下,下述的实施例及实施例中的特征可以相互组合。
请参照图1,本申请提供一种电子设备10,可以搭载Linux系统,用于进行并发数据的传输。电子设备10可以是但不限于服务器。电子设备10中部署有共享内存14,用于存储需要转发的数据。该数据可以是但不限于日志,可以根据实际情况进行灵活确定。
示例性地,并发数据传输的应用场景可以为:一个或多个用户终端可以将自身的日志传输至电子设备10的共享内存14,然后由电子设备10将用户终端实时传输的日志从共享内存14并发输出至服务端。服务端可以为需要对日志进行分析处理的服务器或终端设备。需要说明的是,电子设备10的共享内存14,可以和其他设备的共享内存14组成共享存储系统,共享存储系统可以用于数据的存储与共享。另外,电子设备10本身也可以作为一个服务端。
电子设备10可以包括处理模块11及存储模块12。存储模块12内存储计算机程序,当计算机程序被处理模块11执行时,使得电子设备10能够执行下述数据传输处理方法中的各步骤。其中,共享内存14可以为存储模块12中的部分存储空间,或者,共享内存14可以为独立于存储模块12的存储器。
处理模块11、存储模块12以及数据传输处理装置200各个元件之间直接或间接地电性连接,以实现数据的传输或交互。例如,这些元件相互之间可通过一条或多条通讯总线或信号线实现电性连接。
请参照图2,本申请提供一种数据传输处理方法,可以应用于上述的电子设备10,由电子设备10执行或实现方法的各步骤,能够提高数据传输的效率。方法可以包括如下步骤:
步骤S110,在写线程调用消息发送接口时,判断所述消息发送接口的线程局部变量是否为第一预设值;
步骤S120,当所述线程局部变量为第一预设值时,通过所述写线程向所述写线程所对应的目标第一环形队列写入待传输数据,所述第一预设值表征已建立所述目标第一环形队列与所述写线程、所述目标第一环形队列与读线程的连接,其中,所述读线程预先打开有所述写线程在电子设备10的共享内存14中创建的所述目标第一环形队列,且所述目标第一环形队列已被加入到所述读线程的队列池中,且所述目标第一环形队列为无锁队列。
在上述的实施方式中,通过消息发送接口的线程局部变量,可以自动检测是否完成连接的建立,后续传输数据时,便向预先已加入读线程队列池的无锁的第一环形队列写入数据,由于第一环形队列未加锁,可以节省加锁、解锁的时间,如此,可以提高数据写入、读取输出的效率。
下面将对方法的各步骤进行详细阐述,如下:
步骤S110,当用户终端欲向服务端发送数据时,需要由电子设备10进行并发数据的中转处理。电子设备10在接收到用户终端的数据后,便会通过写线程调用消息发送接口,然后自动判断消息发送接口的线程局部变量是否为第一预设值。消息发送接口为电子设备10中向服务端输出数据的接口。
可理解地,在消息发送接口中,预先定义静态线程的线程局部变量。该线程局部变量用于自动判断第一环形队列与读进程是否建立连接。线程局部变量可以用于在写线程初始化时创建第一环形队列,以及用于建立第一环形队列与读线程的连接。
例如,若线程局部变量为第一预设值时,表示已建立第一环形队列与写线程、第一环形队列与读线程的连接;若线程局部变量为第二预设值,表示未建立第一环形队列与读线程的连接。其中,第一预设值与第二预设值不同,可以根据实际情况进行灵活确定。
示例性地,假设,第一预设值为数字“1”,第二预设值为数字“0”,在自动检测是否建立有连接时,若消息发送接口的线程局部变量为“1”,则表示已建立第一环形队列与写线程、第一环形队列与读线程的连接;若消息发送接口的线程局部变量为“0”,则表示未建立第一环形队列与读线程的连接,此时,便需要建立第一环形队列与读线程的连接。如此,可以进行是否完成连接建立的自动检测与连接的自动建立,简化数据通信的操作细节。
需要说明的是,读线程可以存储记录需要打开的写线程的第一环形队列的标识信息。读线程可以打开读线程自身记录有标识信息的环形队列,在打开部分或所有的第一环形队列后,便会形成队列池。若读线程未打开任何写线程的第一环形队列,此时,队列池可看做不存在。
在步骤S120之前,方法可以包括自动建立第一环形队列与读线程之间的连接的步骤。例如,在步骤“通过所述写线程向所述写线程所对应的目标第一环形队列写入待传输数据”之前,方法可以包括:
当所述写线程调用所述消息发送接口,且所述消息发送接口的线程局部变量为第二预设值时,通过所述读线程在所述共享内存14中创建的第二环形队列,将所述写线程所创建的目标第一环形队列的标识信息输出至所述读线程,所述第二预设值表征未建立第一环形队列与所述读线程的连接;
根据所述标识信息,通过所述读线程将所述第一环形队列加入所述队列池,以建立所述读线程与所述第一环形队列的连接,并将所述消息发送接口的线程局部变量设置为所述第一预设值,所述第一预设值表征已完成所述第一环形队列与所述写线程、所述第一环形队列与所述读线程的连接建立。
在本实施例中,写线程所创建的环形队列为第一环形队列。第二环形队列为读线程在初始化时,在共享内存14中创建的环形队列。
其中,第二环形队列与写线程、读线程建立有连接。可理解地,写线程可以自动创建一个与该写线程对应的第一环形队列,每个第一环形队列具有标识信息。第二环形队列用于接收不同写线程传输过来的连接建立消息,该连接建立消息中包括写线程所对应的第一环形队列的标识信息。即,每个写线程创建的第一环形队列所对应的标识信息,可以通过第二环形队列输出至读线程。
读线程与队列池中的每个第一环形队列建立有连接关系。读线程在接收到第一环形队列的标识信息之后,便表示读线程与该第一环形队列建立有连接,读线程可以基于该标识信息打开该第一环形队列,打开后的第一环形队列即为队列池中的成员。在完成连接建立之后,便将消息发送接口的线程局部变量设置为第一预设值,以表示已完成连接的建立。
可理解地,一个写进程可以包括一个或多个写线程,每个写线程对应至少一个第一环形队列,不同写线程所对应的第一环形队列不同。写线程用于将用户终端传输的数据写入对应的第一环形队列。
示例性地,在并发数据通信期间,在电子设备10中,多个写进程各自的多个写线程可以分别向与写线程对应的第一环形队列写入数据。其中,各写线程对应的第一环形队列已被加入到读线程的队列池中,使得读线程可以轮询读取队列池中的数据,实现并发数据的传输处理。
第一环形队列的标识信息可以是但不限于第一环形队列的队列名称或队列编号,标识信息可以具有唯一性,不同第一环形队列的标识信息不相同。
第二环形队列可以为有锁队列,属于多生产者,单消费者的环形队列,写入消息时需要加锁。即,可以是多个写线程向第二环形队列写数据,单个读线程读取第二环形队列中的数据。
当有多个写线程欲向第二环形队列写入数据时,第二环形队列可以在数据写入期间,进行写操作的锁定,以避免数据错乱。比如,针对第二环形队列的写操作,在任一目标写线程向所述第二环形队列写入数据期间,阻止除去目标写线程之外的其他写线程向第二环形队列写入数据,如此,可以避免造成写数据的混乱。
在本实施例中,采用线程局部变量的方式检测是否建立连接,在线程第一次调用消息发送接口时,自动初始化第一环形队列,并通过读线程与服务端建立连接,在使用上更加方便、灵活,且适用于公共接口。
在步骤S120中,目标第一环形队列可以根据实际情况进行确定。
作为一种可选的实施方式,步骤S120可以包括:当所述线程局部变量为所述第一预设值时,且与所述写线程对应的第一环形队列未写满数据时,将所述写线程对应的第一环形队列作为所述目标第一环形队列,并通过所述写线程向所述目标第一环形队列写入待传输数据
作为一种可选的实施方式,步骤S120可以包括:当所述线程局部变量为所述第一预设值时,且与所述写线程对应的第一环形队列写满数据时,创建新的第一环形队列以作为所述目标第一环形队列,并通过所述写线程向所述目标第一环形队列写入待传输数据,其中,当所述写线程中的在创建所述新的第一环形队列之前的第一环形队列中的数据被读取完时,所述读线程将所述新的第一环形队列加入至所述队列池。
可理解地,写线程预先创建有一个与该写线程对应的第一环形队列,后续数据通信过程中,写线程可以将数据写入该第一环形队列中,此时,该第一环形队列作为目标第一环形队列。若该第一环形队列写满数据,此时,写线程便创建新的第一环形队列,并利用新的第一环形队列替换之前的第一环形队列,以作为目标第一环形队列。后续便将新的数据写入新的第一环形队列中。其中,在旧的第一环形队列中的数据被读取完时,新的第一环形队列才被加入到队列池。即,读线程通常会继续读取该写线程在创建新的第一环形队列之前的第一环形队列中所缓存的数据,在该第一环形队列中的数据被读取完时,读线程才打开新的第一环形队列以加入队列池,并读取新的第一环形队列中的数据。
在本实施例中,每个第一环形队列的数据容量可以为指定值,可以根据实际情况进行确定。由于第一环形队列的数据容量固定,当写入速度大于读取速度时,第一环形队列会满,此时,为了不影响客户端线程执行速率,在队列满时,通过自动创建新的第一环形队列(新的第一环形队列编号可以做加“1”处理),此后该线程的数据由新的第一环形队列输出至读线程。如此,可以在队列满时自动扩展队列,提高通信效率。
在本实施例中,队列池可以包括与一个或多个写进程对应的环形队列。其中,每个写进程包括至少一个写线程,每个写线程对应至少一个环形队列,队列池中的每个环形队列与读线程连接。
示例性地,数据传输处理方法对应的通信框架结构可以如图3所示,该通信框架结构部署在电子设备10中。在电子设备10的通信框架结构中,包括进程1、进程2和进程3。进程1和进程2均为写进程,用于向共享内存14中相应的环形队列写入数据。进程1包括两个写线程,分别写线程1和写线程2。进程2与进程1类似,包括写线程1和写线程2。每个写线程对应一个环形队列,该环形队列即为第一环形队列,且均已加入到队列池中。
进程3为读进程,可以仅包括一个读线程。读线程与队列池中的每个环形队列建立有连接,用于轮询读取队列池中每个环形队列中缓存的数据。
需要说明的是,在其他实施方式中,通信框架结构还可以为不同于图3所示的结构。例如,在通信框架结构中,还可以包括更多的写进程,每个写进程可以包括一个或多个写线程。通信框架结构可以根据实际情况进行灵活确定,这里不作具体限定。
在本申请实施例提供的通信框架结构,可以应用于多写一读的并发数据通信场景。比如,当多个用户终端需要向服务端发送日志数据时,可以同时存在多个写进程,每个写进程可以包括多个写线程。部分或全部写进程可以同时向相应的环形队列写入相应用户终端的日志数据,以进行并发数据的缓存,并由一个读线程进行日志数据的读取与输出。由于队列池中的环形队列(第一环形队列)为无锁队列,因此,可以省去环形队列加锁、解锁的时长,从而有利于提高数据读写传输的效率。
作为一种可选的实施方式,方法还可以包括步骤S130:通过所述读线程轮询读取所述队列池中的所有第一环形队列中的数据,所述所有第一环形队列包括所述目标第一环形队列。
可理解地,队列池中的第一环形队列已均被读线程开启,可以被读线程轮询读取队列池中的各第一环形队列中缓存的数据。读线程所在的电子设备10可以作为服务端,如此,服务端便可以获取到第一环形队列中缓存的数据。若电子设备10不作为服务端,读线程读取到数据后,可以将所读取的数据输出至服务器或其他作为服务端的设备。
读线程可以以轮询的方式,读取队列池中所有的环形队列(第一环形队列)。比如,步骤S130可以包括:针对所述队列池中所有的环形队列,通过所述读线程按照设定顺序依次读取每个环形队列中的相同预设数量的数据。
其中,设定顺序可以根据实际情况进行灵活确定,这里不作具体限定。预设数量可以为一个、两个等数量,可以灵活设置。示例性地,读线程在轮询读取的过程中,读线程可以从每个第一环形队列中仅读一个数据,以实现读数据的均衡处理。
当读线程完成一次轮询读取之后,读线程可以立即再次轮询读取,或在间隔设定周期后,再次轮询读取队列池中的第一环形队列所缓存的数据,直至队列池中的第一环形队列中缓存的数据被读完,或在接收到停止指令时,结束读操作。设定周期可以根据实际情况进行灵活确定。
另外,在读线程再次轮询读取队列池中的第一环形队列之前,可以重新读取第二环形队列中的数据,以检测第二环形队列中是否存在新增的写线程的第一环形队列。若存在新的标识信息,则表示存在新的写线程,以及存在新写线程对应的第一环形队列,此时,便将新写线程的第一环形队列加入队列池,然后,再进行轮询读取操作。如此,可以在读写数据过程中,对写进程、写线程数量进行动态调整,提高写数据的灵活性。
作为一种可选的实施方式,方法还可以包括:当在任一写线程对应的多个第一环形队列中存在闲置队列时,从所述队列池中删除所述闲置队列,所述闲置队列为在预设时长内未被写入数据且不是目标队列编号的第一环形队列;或者,在任一写线程对应的多个第一环形队列中,保留创建时间最晚的第一环形队列,并删除被所述读线程读取完数据的其他第一环形队列,所述其他第一环形队列为所述多个第一环形队列中除去所述创建时间最晚的第一环形队列之外的第一环形队列。其中,预设时长可以根据实际情况进行灵活确定。另外,当队列池中的第一环形队列的写线程退出时,读线程可以删除该写线程所对应的所有第一环形队列。
可理解地,当一个写线程对应有多个第一环形队列时,目标队列编号可以根据实际情况进行灵活确定。例如,目标队列编号可以为多个第一环形队列中的最大队列编号或最小队列编号。
另外,当一个写线程对应有多个第一环形队列时,读线程可以保留创建时间最晚的第一环形队列。读线程在读取该写线程的多个第一环形队列中的数据期间,可以按照队列创建时间的先后顺序,优先读取创建时间最早的第一环形队列中的数据。当创建时间最早的第一环形队列中的数据,在队列池中通过轮询方式被读取完时,便在队列池中删除该第一环形队列,然后继续按照队列创建时间的先后顺序,读取该写线程剩余的第一环形队列中创建时间最早的第一环形队列中的数据,直至所有环形队列的中的数据被读完。其中,读线程可以在队列池中保留该写线程最晚创建的第一环形队列。
在上述的实施方式中,通过删除闲置队列、取完数据的第一环形队列,有利于减少队列资源的释放,降低系统资源的消耗。
请参照图4,本申请实施例还提供一种数据传输处理装置200,可以应用于上述的电子设备10中,用于执行方法中的各步骤。数据传输处理装置200包括至少一个可以软件或固件(Firmware)的形式存储于存储模块12中或固化在电子设备10操作系统(OperatingSystem,OS)中的软件功能模块。处理模块11用于执行存储模块12中存储的可执行模块,例如数据传输处理装置200所包括的软件功能模块及计算机程序等。
数据传输处理装置200可以包括判断单元210及数据写入单元220,可以执行的操作步骤如下:
判断单元210,用于在写线程调用消息发送接口时,判断所述消息发送接口的线程局部变量是否为第一预设值;
数据写入单元220,用于当所述线程局部变量为第一预设值时,通过所述写线程向所述写线程所对应的目标第一环形队列写入待传输数据,所述第一预设值表征已建立所述目标第一环形队列与所述写线程、所述目标第一环形队列与读线程的连接,其中,所述读线程预先打开有所述写线程在电子设备10的共享内存14中创建的所述目标第一环形队列,且所述目标第一环形队列已被加入到所述读线程的队列池中,且所述目标第一环形队列为无锁队列。
可选地,数据传输处理装置200还可以包括数据输出单元,用于通过所述读线程轮询读取所述队列池中的所有第一环形队列中的数据,所述所有第一环形队列包括所述目标第一环形队列。
可选地,数据传输处理装置200还可以包括连接建立单元。在数据写入单元220通过所述写线程向所述写线程所对应的目标第一环形队列写入待传输数据之前,数据输出单元用于当所述线程局部变量为第二预设值时,通过所述读线程在所述共享内存14中创建的第二环形队列,将所述写线程所创建的目标第一环形队列的标识信息输出至所述读线程,所述第二预设值表征未建立所述目标第一环形队列与所述读线程的连接;连接建立单元用于根据所述标识信息,通过所述读线程将所述目标第一环形队列加入所述队列池,以建立所述读线程与所述目标第一环形队列的连接,并将所述消息发送接口的线程局部变量设置为所述第一预设值。
可选地,数据写入单元220还用于:当所述线程局部变量为所述第一预设值时,且与所述写线程对应的第一环形队列未写满数据时,将所述写线程对应的第一环形队列作为所述目标第一环形队列,并通过所述写线程向所述目标第一环形队列写入待传输数据,或者当所述线程局部变量为所述第一预设值时,且与所述写线程对应的第一环形队列写满数据时,创建新的第一环形队列以作为所述目标第一环形队列,并通过所述写线程向所述目标第一环形队列写入待传输数据,其中,当所述写线程中的在创建所述新的第一环形队列之前的第一环形队列中的数据被读取完时,所述读线程将所述新的第一环形队列加入至所述队列池。
可选地,数据转发处理装置还可以包括删除单元,用于当在任一写线程对应的多个第一环形队列中存在闲置队列时,从所述队列池中删除所述闲置队列,所述闲置队列为在预设时长内未被写入数据且不是目标队列编号的第一环形队列;或者,在任一写线程对应的多个第一环形队列中,保留创建时间最晚的第一环形队列,删除单元用于删除被所述读线程读取完数据的其他第一环形队列,所述其他第一环形队列为所述多个第一环形队列中除去所述创建时间最晚的第一环形队列之外的第一环形队列。
可选地,数据输出单元还可以用于:针对所述队列池中所有的第一环形队列,通过所述读线程按照设定顺序依次读取每个第一环形队列中的相同预设数量的数据。
在本实施例中,处理模块11可以是一种集成电路芯片,具有信号的处理能力。上述处理模块11可以是通用处理器。例如,该处理器可以是中央处理器(Central ProcessingUnit,CPU)、数字信号处理器(Digital Signal Processing,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件,可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。
存储模块12可以是,但不限于,随机存取存储器,只读存储器,可编程只读存储器,可擦除可编程只读存储器,电可擦除可编程只读存储器等。在本实施例中,存储模块12可以用于存储第一环形队列、第二环形队列等。当然,存储模块12还可以用于存储程序,处理模块11在接收到执行指令后,执行该程序。
通信模块13用于通过网络建立电子设备10与其他设备的通信连接,并通过网络收发数据。
可以理解的是,图1所示的结构仅为电子设备10的一种结构示意图,电子设备10还可以包括比图1所示更多的组件。图1中所示的各组件可以采用硬件、软件或其组合实现。
需要说明的是,所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的电子设备10的具体工作过程,可以参考前述方法中的各步骤对应过程,在此不再过多赘述。
本申请实施例还提供一种计算机可读存储介质。计算机可读存储介质中存储有计算机程序,当计算机程序在计算机上运行时,使得计算机执行如上述实施例中所述的数据传输处理方法。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本申请可以通过硬件实现,也可以借助软件加必要的通用硬件平台的方式来实现,基于这样的理解,本申请的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施场景所述的方法。
综上所述,在本方案中,通过消息发送接口的线程局部变量,可以自动检测是否完成连接的建立,后续传输数据时,便向预先加入队列池的无锁的第一环形队列写入数据,由于第一环形队列未加锁,可以节省加锁、解锁的时间,如此,可以提高数据写入、读取输出的效率。
在本申请所提供的实施例中,应该理解到,所揭露的装置、系统和方法,也可以通过其它的方式实现。以上所描述的装置、系统和方法实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本申请的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。另外,在本申请各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
以上所述仅为本申请的实施例而已,并不用于限制本申请的保护范围,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (9)
1.一种数据传输处理方法,其特征在于,所述方法包括:
在写线程调用消息发送接口时,判断所述消息发送接口的线程局部变量是否为第一预设值;
当所述线程局部变量为第一预设值时,通过所述写线程向所述写线程所对应的目标第一环形队列写入待传输数据,所述第一预设值表征已建立所述目标第一环形队列与所述写线程、所述目标第一环形队列与读线程的连接,其中,所述读线程预先打开有所述写线程在电子设备的共享内存中创建的所述目标第一环形队列,且所述目标第一环形队列已被加入到所述读线程的队列池中,且所述目标第一环形队列为无锁队列;
所述方法还包括:通过所述读线程轮询读取所述队列池中的所有第一环形队列中的数据,所述所有第一环形队列包括所述目标第一环形队列;
在通过所述写线程向所述写线程所对应的目标第一环形队列写入待传输数据之前,所述方法还包括:
当所述线程局部变量为第二预设值时,通过所述读线程在所述共享内存中创建的第二环形队列,将所述写线程所创建的目标第一环形队列的标识信息输出至所述读线程,所述第二预设值表征未建立所述目标第一环形队列与所述读线程的连接;根据所述标识信息,通过所述读线程将所述目标第一环形队列加入所述队列池,以建立所述读线程与所述目标第一环形队列的连接,并将所述消息发送接口的线程局部变量设置为所述第一预设值。
2.根据权利要求1所述的数据传输处理方法,其特征在于,所述第二环形队列为有锁队列,所述第二环形队列用于在任一目标写线程向所述第二环形队列写入数据期间,阻止除去所述目标写线程之外的其他写线程向所述第二环形队列写入数据。
3.根据权利要求1所述的数据传输处理方法,其特征在于,当所述线程局部变量为第一预设值时,通过所述写线程向队列池中的目标目标第一环形队列写入待传输数据,包括:
当所述线程局部变量为所述第一预设值时,且与所述写线程对应的第一环形队列未写满数据时,将所述写线程对应的第一环形队列作为所述目标第一环形队列,并通过所述写线程向所述目标第一环形队列写入待传输数据;
或者,当所述线程局部变量为所述第一预设值时,且与所述写线程对应的第一环形队列写满数据时,创建新的第一环形队列以作为所述目标第一环形队列,并通过所述写线程向所述目标第一环形队列写入待传输数据,其中,当所述写线程中的在创建所述新的第一环形队列之前的第一环形队列中的数据被读取完时,所述读线程将所述新的第一环形队列加入至所述队列池。
4.根据权利要求1所述的数据传输处理方法,其特征在于,所述方法还包括:
当在任一写线程对应的多个第一环形队列中存在闲置队列时,从所述队列池中删除所述闲置队列,所述闲置队列为在预设时长内未被写入数据且不是目标队列编号的第一环形队列;
或者,在任一写线程对应的多个第一环形队列中,保留创建时间最晚的第一环形队列,并删除被所述读线程读取完数据的其他第一环形队列,所述其他第一环形队列为所述多个第一环形队列中除去所述创建时间最晚的第一环形队列之外的第一环形队列。
5.根据权利要求1所述的数据传输处理方法,其特征在于,通过所述读线程轮询读取所述队列池中的所有第一环形队列中的数据,包括:
针对所述队列池中所有的第一环形队列,通过所述读线程按照设定顺序依次读取每个第一环形队列中的相同预设数量的数据。
6.根据权利要求1所述的数据传输处理方法,其特征在于,所述队列池包括与多个写进程对应的第一环形队列,其中,每个写进程包括至少一个写线程,每个写线程对应至少一个第一环形队列,所述队列池中的每个第一环形队列与所述读线程连接。
7.一种数据传输处理装置,其特征在于,所述装置包括:
判断单元,用于在写线程调用消息发送接口时,判断所述消息发送接口的线程局部变量是否为第一预设值;
数据写入单元,用于当所述线程局部变量为第一预设值时,通过所述写线程向所述写线程所对应的目标第一环形队列写入待传输数据,所述第一预设值表征已建立所述目标第一环形队列与所述写线程、所述目标第一环形队列与读线程的连接,其中,所述读线程预先打开有所述写线程在电子设备的共享内存中创建的所述目标第一环形队列,且所述目标第一环形队列已被加入到所述读线程的队列池中,且所述目标第一环形队列为无锁队列;
数据输出单元,用于通过所述读线程轮询读取所述队列池中的所有第一环形队列中的数据,所述所有第一环形队列包括所述目标第一环形队列;
在所述数据写入单元通过所述写线程向所述写线程所对应的目标第一环形队列写入待传输数据之前,所述数据输出单元还用于当所述线程局部变量为第二预设值时,通过所述读线程在所述共享内存中创建的第二环形队列,将所述写线程所创建的目标第一环形队列的标识信息输出至所述读线程,所述第二预设值表征未建立所述目标第一环形队列与所述读线程的连接;
连接建立单元用于根据所述标识信息,通过所述读线程将所述目标第一环形队列加入所述队列池,以建立所述读线程与所述目标第一环形队列的连接,并将所述消息发送接口的线程局部变量设置为所述第一预设值。
8.一种电子设备,其特征在于,所述电子设备包括相互耦合的处理器及存储器,所述存储器内存储计算机程序,当所述计算机程序被所述处理器执行时,使得所述电子设备执行如权利要求1-6中任一项所述的数据传输处理方法。
9.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机程序,当所述计算机程序在计算机上运行时,使得所述计算机执行如权利要求1-6中任一项所述的数据传输处理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110973967.8A CN113672406B (zh) | 2021-08-24 | 2021-08-24 | 数据传输处理方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110973967.8A CN113672406B (zh) | 2021-08-24 | 2021-08-24 | 数据传输处理方法、装置、电子设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113672406A CN113672406A (zh) | 2021-11-19 |
CN113672406B true CN113672406B (zh) | 2024-02-06 |
Family
ID=78545526
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110973967.8A Active CN113672406B (zh) | 2021-08-24 | 2021-08-24 | 数据传输处理方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113672406B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114356589B (zh) * | 2021-12-09 | 2024-04-12 | 北京华云安信息技术有限公司 | 多写入者多读取者的数据存储和读取方法、装置及设备 |
CN114281484B (zh) * | 2021-12-29 | 2022-08-26 | 元心信息科技集团有限公司 | 数据传输方法、装置、设备及存储介质 |
CN114500403A (zh) * | 2022-01-24 | 2022-05-13 | 中国联合网络通信集团有限公司 | 一种数据处理方法、装置及计算机可读存储介质 |
CN115525631B (zh) * | 2022-10-31 | 2023-09-05 | 华润数字科技有限公司 | 数据库数据迁移方法、装置、设备、存储介质 |
CN117040963B (zh) * | 2023-10-09 | 2023-12-26 | 成都亿佰特电子科技有限公司 | 一种分布式io主从快速通讯的方法和系统 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2018121740A1 (zh) * | 2016-12-30 | 2018-07-05 | 北京奇虎科技有限公司 | 一种流数据的并发读写方法和装置 |
CN109729024A (zh) * | 2018-12-29 | 2019-05-07 | 中盈优创资讯科技有限公司 | 数据包处理系统及方法 |
CN110888727A (zh) * | 2019-11-26 | 2020-03-17 | 北京达佳互联信息技术有限公司 | 并发无锁队列实现方法、装置及存储介质 |
WO2020177549A1 (zh) * | 2019-03-06 | 2020-09-10 | 阿里巴巴集团控股有限公司 | 数据的读写方法和装置 |
CN113051057A (zh) * | 2021-03-30 | 2021-06-29 | 联想(北京)有限公司 | 多线程数据无锁处理方法、装置及电子设备 |
CN113157467A (zh) * | 2021-05-07 | 2021-07-23 | 瑞斯康达科技发展股份有限公司 | 一种多进程数据输出方法 |
-
2021
- 2021-08-24 CN CN202110973967.8A patent/CN113672406B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2018121740A1 (zh) * | 2016-12-30 | 2018-07-05 | 北京奇虎科技有限公司 | 一种流数据的并发读写方法和装置 |
CN109729024A (zh) * | 2018-12-29 | 2019-05-07 | 中盈优创资讯科技有限公司 | 数据包处理系统及方法 |
WO2020177549A1 (zh) * | 2019-03-06 | 2020-09-10 | 阿里巴巴集团控股有限公司 | 数据的读写方法和装置 |
CN110888727A (zh) * | 2019-11-26 | 2020-03-17 | 北京达佳互联信息技术有限公司 | 并发无锁队列实现方法、装置及存储介质 |
CN113051057A (zh) * | 2021-03-30 | 2021-06-29 | 联想(北京)有限公司 | 多线程数据无锁处理方法、装置及电子设备 |
CN113157467A (zh) * | 2021-05-07 | 2021-07-23 | 瑞斯康达科技发展股份有限公司 | 一种多进程数据输出方法 |
Also Published As
Publication number | Publication date |
---|---|
CN113672406A (zh) | 2021-11-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113672406B (zh) | 数据传输处理方法、装置、电子设备及存储介质 | |
CN108449410B (zh) | 一种云平台中消息管理方法、系统及相关装置 | |
US9778998B2 (en) | Data restoration method and system | |
US20140089857A1 (en) | Method and apparatus for entering a client function module | |
CN107172171B (zh) | 一种服务请求处理方法、装置及计算机可读存储介质 | |
CN107341062B (zh) | 一种数据推送方法、装置、设备以及存储介质 | |
CN109361525B (zh) | 重启分布式部署多服务的方法、装置、控制终端及介质 | |
CN114025018A (zh) | 数据处理方法、装置、网络设备及计算机可读存储介质 | |
US11736149B2 (en) | Data transmission method for Bluetooth card reader and electronic device | |
US20220237129A1 (en) | Providing a secure communication channel between kernel and user mode components | |
CN111737022A (zh) | 一种基于微服务的接口调用方法、系统、设备及介质 | |
CN108366098B (zh) | 一种网络节点的数据交互方法及装置 | |
CN114363334B (zh) | 云系统及云桌面虚拟机的网络配置方法、装置及设备 | |
CN101699421B (zh) | 串口共享的方法和服务端 | |
EP3945420A1 (en) | Method and apparatus for data processing, server and storage medium | |
CN110881224B (zh) | 一种网络长连接方法、装置、设备及存储介质 | |
CN112363980B (zh) | 一种分布式系统的数据处理方法及装置 | |
CN111274047A (zh) | 信息处理方法、终端、系统、计算机设备和存储介质 | |
CN114138371B (zh) | 配置动态加载方法、装置及计算机设备、存储介质 | |
CN113641604B (zh) | 一种数据传输方法及系统 | |
US20140025730A1 (en) | Managing concurrent conversations over a communications link between a client computer and a server computer | |
CN115378685A (zh) | 数据处理方法、系统、电子设备及计算机可读存储介质 | |
CN113326151A (zh) | 进程间通信方法、装置、设备、系统及存储介质 | |
CN112231290A (zh) | 一种本地日志的处理方法、装置、设备及存储介质 | |
CN112099736A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |