一种基于异步非阻塞的磁盘文件读写速率控制方法与流程

文档序号:12462596阅读:272来源:国知局

本发明涉及一种磁盘文件读写速率控制方法,特别是涉及一种基于异步非阻塞的磁盘文件读写速率控制方法,在非阻塞的磁盘文件读写过程中实现对速率的控制。



背景技术:

在项目应用环境中,我们需要磁盘提供稳定的文件读写速率并能够对读写速率进行精准控制。在对多个磁盘文件同时进行读写时,会出现读写速率有的较快有的较慢或者时快时慢的情况。这种情况发生在VOD点播系统中流媒体服务器边下载节目文件边提供节目流推送的过程中时,如果节目文件所在服务器不能提供稳定的下载速率,将导致流媒体服务器无法按节目码率推送文件内容到点播客户端,进一步导致点播客户端视频画面和声音出现停顿现象,严重影响用户观看效果。因此,节目文件服务器必须为每个下载的节目文件提供稳定的下载速率。同时,节目文件服务器需要具备对大量文件的高并发下载提供稳定的速率控制能力。

要对磁盘文件读写速率进行精准控制需要一个高精度的定时器。由于系统定时器的实现及使用机制会导致其存在毫秒级的误差,这种误差的叠加会严重影响控制速率的准确性。在这种情况下,同时进行大量文件的读写操作会使对速率准确而稳定的控制变得非常困难。因此,常规的技术方法难于做到在高并发条件下对磁盘文件读写速率进行准确稳定的控制。



技术实现要素:

本发明要解决的技术问题是提供一种基于异步非阻塞的磁盘文件读写速率控制方法,实现对磁盘文件精准和可靠的读写速率控制。

本发明采用的技术方案如下:一种基于异步非阻塞的磁盘文件读写速率控制方法,具体方法为:

S1、创建一个非阻塞套接字,使用select通过该套接字实现一个定时器,为定时器设置一个默认超时时间;

S2、设置文件所在磁盘能够提供的最大稳定读写速率;

S3、设置磁盘文件的读写路径和读写速率,该磁盘文件的读写速率不大于所述最大稳定读写速率;

S4、设置每次读写操作的数据块的大小,并根据所述磁盘文件的读写速率和每次读写操作的数据块的大小,计算得到磁盘文件读写所需要的时间;

S5、根据所设置的磁盘文件的读写路径,以非阻塞方式打开该读写路径中的文件,并将该文件句柄添加到select的事件监视队列中,在工作线程中对磁盘文件读写超时和读写操作完成进行后续处理。

利用select微秒级的超时精度管理磁盘文件在单位时间内的读写操作次数,实现对速率的精准控制。设置文件所在磁盘能够提供的最大稳定读写速率,使控制的总读写速率不超过磁盘文件的最大稳定读写速率,保证速率控制的可靠稳定。

所述方法还包括,根据磁盘能够提供的最大稳定读写速率,和正在进行文件读写操作的所用的速率和,计算该磁盘当前剩余的可用读写速率,以非阻塞方式打开满足条件的其他读写路径中的文件,并将该文件句柄添加到select的事件监视队列中,在工作线程中对磁盘文件读写超时和读写操作完成进行后续处理。

使select工作在可控制的超时循环中,在超时循环中采用非阻塞的磁盘文件读写方式实现对多个磁盘文件的同时读写操作,使磁盘能够达到最大的稳定读写速率,实现并发性、高效性。

对磁盘文件读写超时进行后续处理的具体方法为:在定时器超时返回时,根据所设定的默认超时时间和计算得到磁盘文件读写所需要的时间,计算并对所述定时器设置下一个所述默认超时时间并进行更新,然后再次执行读写操作。

对读写操作完成进行后续处理的具体方法为:在读写操作完成返回时,根据所设定的默认超时时间和计算得到磁盘文件读写所需要的时间,计算并所述定时器设置下一个所述默认超时时间并进行更新。

所述磁盘能够提供的最大稳定读写速率通过测试过程预先确定。

所述方法还包括,所述S4中设置每次读写操作的数据块的大小的方法为:根据磁盘的IO特性为磁盘设置一个每次文件读写操作的数据库大小,后续的读写操作不能大于该数据库大小。

所述方法还包括,对磁盘的进行标识,记录每个磁盘能够提供的最大稳定读写速率。

所述方法还包括,在读写操作完成返回时,计算并对定时器设置下一个所述默认超时时间后,等待该默认超时时间到来时再执行下一个文件的读写操作。

与现有技术相比,本发明的有益效果是:使用select I/O多路复用模型,通过采用非阻塞的磁盘文件读写操作与异步事件通知的方法,实现了对磁盘文件精准和可靠的读写速率控制;设置文件所在磁盘能够提供的最大稳定读写速率,使控制的总读写速率不超过磁盘文件的最大稳定读写速率,保证速率控制的可靠稳定。select工作在可控制的超时循环中,在超时循环中采用非阻塞的磁盘文件读写方式实现对多个磁盘文件的同时读写操作,使磁盘能够达到最大的稳定读写速率,实现并发性和高效性。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。

本说明书(包括摘要)中公开的任一特征,除非特别叙述,均可被其他等效或者具有类似目的的替代特征加以替换。即,除非特别叙述,每个特征只是一系列等效或类似特征中的一个例子而已。

具体实施例1

一种基于异步非阻塞的磁盘文件读写速率控制方法,具体方法为:

S1、创建一个非阻塞套接字,使用select通过该套接字实现一个定时器,为定时器设置一个默认超时时间;

S2、设置文件所在磁盘能够提供的最大稳定读写速率;

S3、设置磁盘文件的读写路径和读写速率,该磁盘文件的读写速率不大于所述最大稳定读写速率;

S4、设置每次读写操作的数据块的大小,并根据所述磁盘文件的读写速率和每次读写操作的数据块的大小,计算得到磁盘文件读写所需要的时间;

S5、根据所设置的磁盘文件的读写路径,以非阻塞方式打开该读写路径中的文件,并将该文件句柄添加到select的事件监视队列中,在工作线程中对磁盘文件读写超时和读写操作完成进行后续处理。直到读写操作到达文件尾部或在外部函数控制下结束。

在本具体实施例中,在工作线程中创建一个非阻塞方式的套接字,select在工作线程中使用该套接字进行超时检测;创建一个结构体数组,用于存放磁盘最大稳定读写速率,在工作线程中将测试过程得到的每个磁盘能够提供的最大稳定读写速率保存到结构体数组中;采用一个输入接口,用于设置磁盘文件路径和控制读写速率;采用一个结构体,用于存放磁盘文件路径、打开的磁盘文件的句柄和读写速率,并设置一个用于管理该结构体的hash_map。

使用select I/O多路复用模型,利用select微秒级的超时精度管理磁盘文件在单位时间内的读写操作次数,实现对速率的精准控制。设置文件所在磁盘能够提供的最大稳定读写速率,使控制的总读写速率不超过磁盘文件的最大稳定读写速率,保证速率控制的可靠稳定;设置一个读写操作完成和超时后的外部回调函数,用于向外部交互文件读写内容和状态信息(包括超时完成信息和读写操作完成信息)。

具体实施例2

在具体实施例1的基础上,所述方法还包括,根据磁盘能够提供的最大稳定读写速率,和正在进行文件读写操作的所用的速率和,计算该磁盘当前剩余的可用读写速率,以非阻塞方式打开满足条件的其他读写路径中的文件,并将该文件句柄添加到select的事件监视队列中,在工作线程中对磁盘文件读写超时和读写操作完成进行后续处理。在本具体实施例中,将磁盘当前剩余的可用读写速率存放于所述结构体数组中,此时,磁盘剩余可用读写速率就等于磁盘最大稳定读写速率。在输入接口中,检查输入速率是否小于等于输入文件所在磁盘剩余可用读写速率。以非阻塞方式打开满足条件的输入文件,将文件路径、打开后的文件句柄和读写速率保存到结构体中,将该结构体添加到hash_map进行管理。

具体实施例3

在具体实施例1或2的基础上,对磁盘文件读写超时进行后续处理的具体方法为:在定时器超时返回时,根据所设定的默认超时时间和计算得到磁盘文件读写所需要的时间,计算并对所述定时器设置下一个所述默认超时时间并进行更新,然后再次执行读写操作。

具体实施例4

在具体实施例1到3之一的基础上,对读写操作完成进行后续处理的具体方法为:在读写操作完成返回时,根据所设定的默认超时时间和计算得到磁盘文件读写所需要的时间,计算并所述定时器设置下一个所述默认超时时间并进行更新。

具体实施例5

在具体实施例1到4之一的基础上,所述磁盘能够提供的最大稳定读写速率通过测试过程预先确定。

具体实施例6

在具体实施例1到5之一的基础上,所述方法还包括,所述S4中设置每次读写操作的数据块的大小的方法为:根据磁盘的IO特性为磁盘设置一个每次文件读写操作的数据库大小,后续的读写操作不能大于该数据库大小。

具体实施例7

在具体实施例1到6之一的基础上,所述方法还包括,对磁盘的进行标识,记录每个磁盘能够提供的最大稳定读写速率。在本具体实施例中,将磁盘标识存放于所述结构体数组中。

具体实施例8

在具体实施例4到7之一的基础上,所述方法还包括,在读写操作完成返回时,计算并对定时器设置下一个所述默认超时时间后,等待该默认超时时间到来时再执行下一个文件的读写操作。在工作线程中根据读写文件所在磁盘的数据块大小和读写速率为select超时循环计算设置新的超时间隔时间,然后发起一次读写操作。

具体实施例9

在具体实施例1到8之一的基础上,所述方法还包括,所述回调函数提供流程控制,完成对磁盘文件读写的外部控制。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1