掌桥专利:专业的专利平台
掌桥专利
首页

一种数据读取方法、系统、电子设备及存储介质

文献发布时间:2023-06-19 11:16:08


一种数据读取方法、系统、电子设备及存储介质

技术领域

本发明涉及数据处理技术领域,尤其涉及一种数据读取方法、系统、电子设备及存储介质。

背景技术

数据中心中网络节点上的传统网络应用大多是基于x86平台上Linux内核的网络协议栈实现的。自从Linux诞生之日起,如何对网络协议栈进行改进一直是行业研究的热点。

目前,针对Linux内核协议栈进行优化的工作如火如荼,发布的高性能数据包收发(Input/Output,IO)框架,例如Intel DPDK、Netmap等,这些高性能数据包收发框架提高了x86平台的数据包处理性能,但其本身并没有提供完整的网络协议栈,阻碍了其在业界的广泛使用;基于高性能数据包收发框架开发的用户态协议栈,例如mTCP、IX等,具有较高的性能,但是其提供的接口(Application Programming Interface,API)与可移植操作系统接口(Portable Operating System Interface for Unix,POSIX)的语义和功能不同,不能完全兼容现有应用程序。

另外,现有用户态协议栈主要负责网络数据的收发,与应用程序同时运行在用户态,这使得用户态协议栈没有权限阻塞或唤醒应用程序,导致了用户态协议栈提供的用户态数据读取接口read()无法支持阻塞式语义,从而极大地限制了用户态协议栈对现有应用程序的兼容性,以致现有应用程序的移植难度很大。因此,如何解决现有技术中用户态协议栈对现有应用程序兼容性不足的缺陷,已经成为业界关注的重点。

发明内容

本发明提供一种数据读取方法、系统、电子设备及存储介质,用以解决用户态协议栈对现有应用程序兼容性不足的缺陷。

本发明提供一种数据读取方法,包括:

应用程序通过用户态协议栈调用用户态阻塞式数据读取接口,读取数据文件;

在所述数据文件为网络套接字,且所述网络套接字的接收队列中无可读数据的情况下,创建先入先出队列,其中,所述先入先出队列中无可读数据;

通过内核调用内核态阻塞式数据读取接口,对所述先入先出队列进行监测;

在所述先入先出队列中无可读数据的情况下,内核使应用程序进入阻塞状态,并等待新的可读数据。

根据本发明提供的一种数据读取方法,所述应用程序通过用户态协议栈调用用户态阻塞式数据读取接口,读取数据文件的步骤之后,所述方法还包括:

在所述数据文件为非网络套接字的情况下,通过内核调用内核态阻塞式数据读取接口,读取所述非网络套接字。

根据本发明提供的一种数据读取方法,所述读取所述非网络套接字的步骤之后,所述方法还包括:

在所述非网络套接字的接收队列中无可读数据的情况下,内核使所述应用程序进入阻塞状态,并等待新的可读数据。

根据本发明提供的一种数据读取方法,所述读取所述非网络套接字的步骤之后,所述方法还包括:

在所述非网络套接字的接收队列中有可读数据的情况下,内核返回所述可读数据给所述应用程序。

根据本发明提供的一种数据读取方法,所述应用程序通过用户态协议栈调用用户态阻塞式数据读取接口,读取数据文件的步骤之后,所述方法还包括:

在所述数据文件为网络套接字,且所述网络套接字的接收队列中有可读数据的情况下,用户态协议栈返回所述可读数据给所述应用程序。

根据本发明提供的一种数据读取方法,所述等待新的可读数据的步骤之后,所述方法还包括:

在所述网络套接字的接收队列中有新的可读数据的情况下,用户态协议栈对所述先入先出队列进行数据写入;

内核监测到先入先出队列状态发生变化,结束所述应用程序阻塞状态;

用户态协议栈将所述网络套接字的接收队列中新的可读数据返回给所述应用程序。

根据本发明提供的一种数据读取方法,所述等待新的可读数据的步骤之后,所述方法还包括:

在所述非网络套接字的接收队列中有新的可读数据的情况下,内核结束所述应用程序的阻塞状态,并将所述非网络套接字的接收队列中新的可读数据返回给用户态阻塞式数据读取接口;

用户态阻塞式数据读取接口将所述非网络套接字的接收队列中新的可读数据返回给所述应用程序。

本发明还提供一种数据读取系统,包括:

数据文件读取单元,用于应用程序通过用户态协议栈调用用户态阻塞式数据读取接口,读取数据文件;

先入先出队列创建单元,用于在所述数据文件为网络套接字,且所述网络套接字的接收队列中无可读数据的情况下,创建先入先出队列,其中,所述先入先出队列中无可读数据;

先入先出队列监测单元,用于通过内核调用内核态阻塞式数据读取接口,对所述先入先出队列进行监测;

阻塞式数据读取单元,用于在所述先入先出队列中无可读数据的情况下,借助内核使应用程序进入阻塞状态,并等待新的可读数据。

本发明还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述任一种所述数据读取方法的步骤。

本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上述任一种所述数据读取方法的步骤。

本发明提供的数据读取方法、系统、电子设备及存储介质,通过在用户态协议栈中部署用户态阻塞式数据读取接口,在应用程序通过用户态协议栈调用用户态阻塞式数据读取接口读取网络套接字,且该网络套接字接收队列中无可读数据时,用户态数据读取接口将创建先入先出队列,由于先入先出队列是新建数据结构,而新建的队列中显然无可读数据;通过内核调用内核态阻塞式数据读取接口,实时监测先入先出队列中的数据更新动态,在读取到先入先出队列中无可读数据,内核使应用程序进入阻塞状态,等待新的可读数据,从而实现用户态数据读取接口对阻塞式语义的支持,提升用户态协议栈对现有应用程序的兼容性。

附图说明

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

图1是本发明提供的数据读取方法的流程示意图;

图2是本发明提供的数据读取方法的总体流程图之一;

图3是本发明提供的数据读取方法的总体流程图之二;

图4是本发明提供的数据读取系统的结构示意图;

图5是本发明提供的电子设备的结构示意图。

具体实施方式

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

图1是本发明提供的数据读取方法的流程示意图,如图1所示,包括:

步骤S110,应用程序通过用户态协议栈调用用户态阻塞式数据读取接口,读取数据文件。

需要说明的是,本发明中的用户态协议栈和内核处于同一电子设备中。本发明所描述方法的执行主体可以为电子设备,可以理解的是,本发明所描述的应用程序为运行在该电子设备上的应用程序。

具体地,用户态阻塞式数据读取接口read()是由电子设备的用户态协议栈提供的高性能网络应用常用的接口函数之一。用户态协议栈主要负责网络数据的收发。电子设备上的应用程序通过用户态协议栈调用用户态阻塞式数据读取接口read(),可以对网络数据文件进行数据读取。

需要说明的是,当进程在执行用户自己的代码时,则称其处于用户运行态,简称用户态。此时,处理器在特权级最低的(3级)用户代码中运行。可以理解的是,用户态阻塞式数据读取接口read(),是用户态下的数据读取接口函数。

步骤S120,在所述数据文件为网络套接字,且所述网络套接字的接收队列中无可读数据的情况下,创建先入先出队列,其中,所述先入先出队列中无可读数据。

具体地,用户态阻塞式数据读取接口read()可以用来读取网络套接字Socket接收队列中的数据,当应用程序调用用户态阻塞式数据读取接口read(),读取到Socket接收队列中无可读数据时,将创建先入先出队列FIFO。此时,FIFO由于是新建的数据结构,队列中无可读数据。

需要说明的是,本发明中所描述的网络套接字Socket,就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。从所处的地位来讲,套接字上联应用进程,下联网络协议栈,是应用程序通过网络协议进行通信的接口。

需要说明的是,先入先出队列FIFO是First In First Out的缩写,是一种先进先出的数据缓存结构,可实现使第一个进入其内的数据被第一个移出的功能。

还需要说明的是,先入先出队列FIFO能够被用户态协议栈创建和写入数据,并且,FIFO队列中数据的更新动态会被内核态阻塞式数据读取接口kernel_read()实时监测,其中,所述内核态阻塞式数据读取接口是电子设备的内核提供的,从而,内核可以监测到用户态协议栈对先入先出队列FIFO的修改。

通过步骤S120,应用程序通过用户态协议栈调用户态阻塞式数据读取接口read(),读取网络套接字Socket接收队列中的数据,当读取到Socket接收队列中无可读数据时,read()将创建先入先出队列FIFO,为后续实现对实时监测FIFO中数据更新状态的内核态阻塞式数据读取接口kernel_read()的调用,进程由运行状态向阻塞状态切换做准备。

步骤S130,通过内核调用内核态阻塞式数据读取接口,对所述先入先出队列进行监测。

具体地,内核提供的内核态阻塞式数据读取接口kernel_read()是高性能网络应用常用的接口函数之一,它可以读取网络套接字Socket、先入先出队列FIFO等多种类型文件的数据。当没有数据时,内核可以让应用程序进入阻塞状态,节约CPU资源。当数据到来时,内核可以唤醒应用程序读取数据。

进一步地,通过内核调用内核态阻塞式数据读取接口kernel_read(),实时监测FIFO的数据更新动态,读取FIFO中的数据。

需要说明的是,当一个任务(进程)执行系统调用而进入内核代码中执行时,则称该进程处于内核运行态,简称为内核态。此时处理器处于特权级最高的(0级)内核代码中执行。当进程处于内核态时,执行的内核代码会使用当前进程的内核栈。

还需要说明的是,显然地,内核态阻塞式数据读取接口kernel_read()是内核态下被调用的数据读取接口函数。

基于步骤S130,通过内核调用内核态阻塞式数据读取接口kernel_read(),持续对用户态阻塞式数据读取接口read()创建的先入先出队列FIFO进行监测,读取FIFO中的数据,使进程由用户态切换到内核态。

步骤S140,在所述先入先出队列中无可读数据的情况下,内核使应用程序进入阻塞状态,并等待新的可读数据。

具体地,当通过内核调用内核态阻塞式数据读取接口kernel_read()监测先入先出队列FIFO,读取到FIFO中无可读数据时,kernel_read()会使应用程序进入阻塞状态,并等待新的可读数据。

需要说明的是,所谓阻塞状态,简单来说,就是线程或进程在执行过程中暂停,以等待某个条件触发的状态。

通过步骤S140,在内核态阻塞式数据读取接口kernel_read()读取先入先出队列FIFO中无可读数据的情况下,内核使应用程序进入阻塞状态,等待新的可读数据,实现用户态数据读取接口对阻塞式语义的支持。

总之,本发明提供的数据读取方法,通过在用户态协议栈中部署用户态阻塞式数据读取接口read(),在应用程序通过用户态协议栈调用read()读取网络套接字,网络套接字的接收队列中无可读数据的情况下,创建先入先出队列FIFO,FIFO由于是新建的,队列中无可读数据的;通过内核调用内核态阻塞式数据读取接口kernel_read(),实时监测FIFO的数据更新动态,kernel_read()读取到FIFO中无可读数据,使应用程序进入阻塞状态,等待新的可读数据,实现用户态数据读取接口对阻塞式语义的支持,提升了用户态协议栈对现有应用程序的兼容性。

优选地,基于上述任一实施例,所述应用程序通过用户态协议栈调用用户态阻塞式数据读取接口,读取数据文件的步骤之后,所述方法还包括:

在所述数据文件为非网络套接字的情况下,通过内核调用内核态阻塞式数据读取接口,读取所述非网络套接字。

具体地,应用程序通过用户态协议栈调用用户态阻塞式数据读取接口read()读取数据文件,当数据文件为非网络套接字的情况下,通过内核调用内核态阻塞式数据读取接口kernel_read(),对非网络套接字进行数据读取。

基于本实施例提供的方法,应用程序通过用户态协议栈调用用户态阻塞式数据读取接口read()读取数据文件,当数据文件为非网络套接字的情况下,将通过内核调用内核态阻塞式数据读取接口kernel_read(),对该非网络套接字进行数据读取,以实现用户态数据读取接口对非网络套接字读取的支持,可进一步实现用户态协议栈对现有应用程序的兼容。

基于上述任一实施例,所述读取所述非网络套接字的步骤之后,所述方法还包括:

在所述非网络套接字的接收队列中无可读数据的情况下,内核使所述应用程序进入阻塞状态,并等待新的可读数据。

具体地,通过内核调用内核态阻塞式数据读取接口kernel_read(),对非网络套接字进行数据读取,当读取到非网络套接字的接收队列中无可读数据时,kernel_read()会使进程在执行过程中暂停,即应用程序进入阻塞状态,并等待非网络套接字的接收队列中新的可读数据到来。

基于本实施例提供的方法,应用程序通过用户态协议栈调用用户态阻塞式数据读取接口read()读取数据文件,在实现用户态数据读取接口对非网络套接字读取的支持的基础上,通过内核调用内核态阻塞式数据读取接口kernel_read()读取无可读数据的非网络套接字,使应用程序进入阻塞状态,等待新的可读数据,以实现用户态数据读取接口对阻塞式语义的支持,进一步提升用户态协议栈对现有应用程序的兼容性。

基于上述任一实施例,所述读取所述非网络套接字的步骤之后,所述方法还包括:

在所述非网络套接字的接收队列中有可读数据的情况下,内核返回所述可读数据给所述应用程序。

可以理解的是,通过内核调用内核态阻塞式数据读取接口kernel_read(),对非网络套接字进行数据读取,当读取到非网络套接字的接收队列中有可读数据时,kernel_read()会将该可读数据返回给应用程序,从而完成整个数据读取过程。

基于上述任一实施例,所述应用程序通过用户态协议栈调用用户态阻塞式数据读取接口,读取数据文件的步骤之后,所述方法还包括:

在所述数据文件为网络套接字,且所述网络套接字的接收队列中有可读数据的情况下,用户态协议栈返回所述可读数据给所述应用程序。

具体地,应用程序通过用户态协议栈调用用户态阻塞式数据读取接口read(),读取网络套接字Socket时,在Socket的接收队列中有可读数据的情况下,用户态阻塞式数据读取接口read()会将该可读数据返回给应用程序,从而完成整个数据读取过程。

基于上述任一实施例,所述等待新的可读数据的步骤之后,所述方法还包括:

在所述网络套接字的接收队列中有新的可读数据的情况下,用户态协议栈对所述先入先出队列进行数据写入;

内核监测到所述先入先出队列状态发生变化,结束所述应用程序阻塞状态;

用户态协议栈将所述网络套接字的接收队列中新的可读数据返回给所述应用程序。

具体地,在应用程序进入阻塞状态的情况下,当数据文件为网络套接字Socket,且其接收队列中有新的可读数据时,用户态协议栈会对先入先出队列FIFO进行数据写入,内核态阻塞式数据读取接口kernel_read()监测到FIFO中出现数据更新后,结束应用程序的阻塞状态,即唤醒应用程序。随后,用户态阻塞式数据读取接口read()将Socket的接收队列中新的可读数据返回给应用程序,从而完成整个数据读取过程。

在一个实施例中,用户态协议栈将“1”、“2”、“3”、“a”等单个或者“1,2,3”、“a,b,c”等多个数据分别写入FIFO中,均可以使内核态阻塞式数据读取接口kernel_read()监测到先入先出队列FIFO中的数据更新动态,从而结束应用程序的阻塞状态。

基于该实施例提供的方法,本发明在应用程序进入阻塞状态的情况下,通过用户态协议栈对FIFO进行数据写入,使FIFO中的数据状态得到更新,从而使kernel_read()能监测到FIFO的数据更新动态,结束应用程序的阻塞状态,唤醒应用程序。应用程序唤醒后,用户态阻塞式数据读取接口read()将Socket的接收队列中新的可读数据返回给应用程序,完成整个数据读取过程。

基于上述任一实施例,所述等待新的可读数据的步骤之后,所述方法还包括:

在所述非网络套接字的接收队列中有新的可读数据的情况下,内核结束所述应用程序的阻塞状态,并将所述非网络套接字的接收队列中新的可读数据返回给用户态阻塞式数据读取接口;

用户态阻塞式数据读取接口将所述非网络套接字的接收队列中新的可读数据返回给所述应用程序。

具体地,在应用程序进入阻塞状态,且数据文件为非网络套接字的情况下,当非网络套接字的接收队列中接收到新的可读数据时,内核结束应用程序的阻塞状态,唤醒应用程序,并将所述非网络套接字的接收队列中新的可读数据返回给用户态阻塞式数据读取接口。应用程序被唤醒后,用户态阻塞式数据读取接口read()将非网络套接字的接收队列中新的可读数据返回给应用程序。

基于该实施例提供的方法,在应用程序进入阻塞状态的情况下,通过内核态阻塞式数据读取接口kernel_read()监测到非网络套接字中出现了数据更新动态,内核结束应用程序的阻塞状态,唤醒应用程序,并将所述非网络套接字的接收队列中新的可读数据返回给用户态阻塞式数据读取接口。随后,用户态阻塞式数据读取接口read()返回非网络套接字接收队列中新的可读数据给应用程序,从而完成整个数据读取过程。

图2是本发明提供的数据读取方法的总体流程图之一,如图2所示,描述了应用程序调用用户态阻塞式数据读取接口read()的工作机制,该工作机制包括以下步骤:

步骤S11,应用程序调用用户态阻塞式数据读取接口read()读取文件fd1;

步骤S12,判断文件fd1是否为网络套接字,若是网络套接字,则执行步骤S13,若不是网络套接字,则执行步骤S121;

步骤S121,调用内核态阻塞式数据读取接口kernel_read()读取文件fd1;

步骤S122,判断fd1中是否已有可读数据,若有可读数据,则执行步骤S123,若没有可读数据,则执行步骤S16;

步骤S123,返回可用数据给应用程序;

步骤S13,判断用户态协议栈中文件fd1的接收队列中是否已有可读数据,若有可读数据,则执行步骤S123,若没有可读数据,则执行步骤S14;

步骤S14,创建先入先出队列FIFO;

步骤S15,调用内核态阻塞式数据读取接口kernel_read()读取FIFO,FIFO无可读数据;

步骤S16,内核态阻塞式数据读取接口kernel_read()使应用进入阻塞状态,等待可用数据。

应用程序调用用户态阻塞式数据读取接口read()的工作机制的各流程环节已在前面内容作过充分描述说明,在此不作赘述。

图3是本发明提供的数据读取方法的总体流程图之二,是承接图2中应用程序进入阻塞状态之后的流程图,如图3所示,描述了在新的可用数据到来时,用户态阻塞式数据读取接口read()的工作机制,该工作机制包括以下步骤:

步骤S21,文件fd1有新可读数据;

步骤S22,判断文件fd1是否是网络套接字,若是网络套接字,则执行步骤S23,若不是网络套接字,则执行步骤S24;

步骤S23,用户态协议栈将“1”写入FIFO;

步骤S24,内核态阻塞式数据读取接口kernel_read()结束阻塞,内核唤醒应用程序;

步骤S25,用户态阻塞式数据读取接口read()将文件fd1的新可读数据返回给应用程序。

如前面所述,在新的可用数据到来时,用户态阻塞式数据读取接口read()工作机制的各流程环节已作详细描述说明,在此不作赘述。

图4是本发明提供的数据读取系统的结构示意图,如图4所示,包括:

数据文件读取单元410,用于应用程序通过用户态协议栈调用用户态阻塞式数据读取接口,读取数据文件;

先入先出队列创建单元420,用于在所述数据文件为网络套接字,且所述网络套接字的接收队列中无可读数据的情况下,创建先入先出队列,其中,所述先入先出队列中无可读数据;

先入先出队列监测单元430,用于通过内核调用内核态阻塞式数据读取接口,对所述先入先出队列进行监测;

阻塞式数据读取单元440,用于在所述先入先出队列中无可读数据的情况下,借助内核使应用程序进入阻塞状态,并等待新的可读数据。

根据本发明提供的数据读取系统,所述应用程序通过用户态协议栈调用用户态阻塞式数据读取接口,读取数据文件的步骤之后,还包括:

在所述数据文件为非网络套接字的情况下,通过内核调用内核态阻塞式数据读取接口,读取所述非网络套接字。

根据本发明提供的数据读取系统,所述读取所述非网络套接字的步骤之后,还包括:

在所述非网络套接字的接收队列中无可读数据的情况下,内核使所述应用程序进入阻塞状态,并等待新的可读数据。

根据本发明提供的数据读取系统,所述读取所述非网络套接字的步骤之后,还包括:

在所述非网络套接字的接收队列中有可读数据的情况下,内核返回所述可读数据给所述应用程序。

根据本发明提供的数据读取系统,所述应用程序通过用户态协议栈调用用户态阻塞式数据读取接口,读取数据文件的步骤之后,还包括:

在所述数据文件为网络套接字,且所述网络套接字的接收队列中有可读数据的情况下,用户态协议栈返回所述可读数据给所述应用程序。

根据本发明提供的数据读取系统,所述等待新的可读数据的步骤之后,还包括:

在所述网络套接字的接收队列中有新的可读数据的情况下,用户态协议栈对所述先入先出队列进行数据写入;

内核监测到所述先入先出队列状态发生变化,结束所述应用程序阻塞状态;

用户态协议栈将所述网络套接字的接收队列中新的可读数据返回给所述应用程序。

根据本发明提供的数据读取系统,所述等待新的可读数据的步骤之后,还包括:

在所述非网络套接字的接收队列中有新的可读数据的情况下,内核结束所述应用程序的阻塞状态,并将所述非网络套接字的接收队列中新的可读数据返回给用户态阻塞式数据读取接口;

用户态阻塞式数据读取接口将所述非网络套接字的接收队列中新的可读数据返回给所述应用程序。

本发明提供的数据读取系统,在用户态协议栈中部署用户态阻塞式数据读取接口read(),通过借助先入先出队列FIFO和内核态阻塞式数据读取接口kernel_read(),实现对网络套接字数据的阻塞式读取,以实现用户态阻塞式数据读取接口对阻塞式语义的支持,提升用户态协议栈对现有应用程序的兼容性。

图5是本发明提供的电子设备的结构示意图,如图5所示,该电子设备可以包括:处理器(processor)510、通信接口(Communications Interface)520、存储器(memory)530和通信总线540,其中,处理器510,通信接口520,存储器530通过通信总线540完成相互间的通信。处理器510可以调用存储器530中的逻辑指令,以执行所述数据读取方法,该方法包括:应用程序通过用户态协议栈调用用户态阻塞式数据读取接口,读取数据文件;在所述数据文件为网络套接字,且所述网络套接字的接收队列中无可读数据的情况下,创建先入先出队列,其中,所述先入先出队列中无可读数据;通过内核调用内核态阻塞式数据读取接口,对所述先入先出队列进行监测;在所述先入先出队列中无可读数据的情况下,内核使应用程序进入阻塞状态,并等待新的可读数据。

此外,上述的存储器530中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。

另一方面,本发明还提供一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法所提供的所述数据读取方法,该方法包括:应用程序通过用户态协议栈调用用户态阻塞式数据读取接口,读取数据文件;在所述数据文件为网络套接字,且所述网络套接字的接收队列中无可读数据的情况下,创建先入先出队列,其中,所述先入先出队列中无可读数据;通过内核调用内核态阻塞式数据读取接口,对所述先入先出队列进行监测;在所述先入先出队列中无可读数据的情况下,内核使应用程序进入阻塞状态,并等待新的可读数据。

又一方面,本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各提供的所述数据读取方法,该方法包括:应用程序通过用户态协议栈调用用户态阻塞式数据读取接口,读取数据文件;在所述数据文件为网络套接字,且所述网络套接字的接收队列中无可读数据的情况下,创建先入先出队列,其中,所述先入先出队列中无可读数据;通过内核调用内核态阻塞式数据读取接口,对所述先入先出队列进行监测;在所述先入先出队列中无可读数据的情况下,内核使应用程序进入阻塞状态,并等待新的可读数据。

以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。

最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

相关技术
  • 一种数据读取方法、系统、电子设备及存储介质
  • 一种数据读取方法、电子设备及计算机存储介质
技术分类

06120112859953