一种基于请求处理服务的HDF5文件多线程访问方法与流程

文档序号:12063696阅读:733来源:国知局
一种基于请求处理服务的HDF5文件多线程访问方法与流程

本发明属于大文件读写领域,尤其涉及一种基于请求处理服务的HDF5文件多线程访问方法。



背景技术:

随着科学技术的快速进步发展,科学研究的数据量大幅度增长,数据文件的数据结构日益复杂,数据需要计算的部分不断增大,对科学数据计算的精度和复杂程度不断增强,科学计算越来越明显的呈现出数据密集型和计算密集型的特征。因此,需要一种正确的文件格式和一种高效的文件读写方法来实现数据高性能处理。

HDF5(Hierarchical Data Format Five,层次数据格式第5版)是用于存储科学数据的一种文件格式和库文件。它采用二进制格式存储科学数据及元数据,支持大量的数据对象和复杂的数据结构,其文件格式具有自我描述、通用性、灵活性、扩展性和跨平台性等特点。同时,它也是高层次的I/O库,提供应用程序之间的接口和并行MPI-IO操作,支持文件级并行I/O、数据压缩、子集访问等高效存储机制,提供了高效灵活的并行I/O机制,满足科学数据存储不断增加和数据处理不断变化的需求。

随着CPU多核技术的发展和操作系统的支持,多线程编程已被广泛的应用到各种领域的计算机软件实现中。目前,在应用程序中访问共享HDF5文件也应用了多线程架构模式。由于是多个线程之间对HDF5文件进行访问,为了保证文件的原子性和数据的一致性,HDF5官方给出的解决方法是,在线程读取数据的前后对其进行加减递归锁的操作,来保证在读写过程中各个线程互不影响各自的处理流程。但是,当一个线程获得锁后,其他发出请求的线程都阻塞在这个锁上,直到持有锁的线程发出解锁信号等待线程才能被唤醒。由于HDF5文件数据量较大且数据结构复杂,这样就会导致加锁时间较长,其他请求线程阻塞的时间也会长。对于实时 性要求较高的应用程序,这种文件读写方法将成为影响程序整体性能的瓶颈。



技术实现要素:

(一)要解决的技术问题

本发明的目的在于,提供一种HDF5文件多线程访问方法,能够让多个线程实时、非阻塞地访问HDF5文件,提高应用程序的整体性能,实现对科学数据的高性能处理。

(二)技术方案

本发明提供一种基于请求处理服务的HDF5文件多线程访问方法,请求处理服务用于接收多个线程发送的访问请求,并根据访问请求对HDF5文件进行访问,方法包括:

S1,多个线程将相应的访问请求发送至请求处理服务;

S2,针对每一个访问请求,请求处理服务根据访问请求对HDF5文件进行访问,得到与访问请求对应的访问结果;

S3,请求处理服务将访问结果发送给访问请求对应的线程。

(三)有益效果

本发明具有以下优点:

(1)多个线程发起访问HDF5文件请求时,通过请求处理服务立即返回响应消息,以使该线程执行后续任务,避免了多线程访问共享HDF5文件引起的线程阻塞,因此应用程序的整体性能得到提升。

(2)请求处理服务通过任务调度队列将多个线程的访问请求聚合起来,然后统一对HDF5文件进行访问处理,提高了总体访问文件的效率。

附图说明

图1是本发明提供的基于请求处理服务的HDF5文件多线程访问方法的流程图。

图2是本发明实施例提供的基于请求处理服务的HDF5文件多线程访问方法的示意图。

具体实施方式

本发明提供一种HDF5文件多线程访问方法,通过设置一个请求处理服务,用于接收多个线程发送的访问请求,根据访问请求对HDF5文件进行访问,并将访问结果发送给访问请求对应的线程;其中,请求处理服务接收访问请求后立即向线程返回响应消息,避免了多线程访问共享HDF5文件引起的线程阻塞,另外,请求处理服务通过任务调度队列将多个线程的访问请求聚合起来,然后统一对HDF5文件进行访问处理,提高了总体访问文件的效率。本发明能够让多个线程实时、非阻塞地访问HDF5文件,提高应用程序的整体性能,实现对科学数据的高性能处理。

图1是本发明提供的基于请求处理服务的HDF5文件多线程访问方法的流程图,其中,该请求处理服务用于接收多个线程发送的访问请求,并根据访问请求对HDF5文件进行访问,方法包括:

S101,多个线程将相应的访问请求发送至请求处理服务,如图1所示,共有n个线程(T0,T1,…Tn)并行访问共享HDF5文件,其中访问类型可以是读或者写;

S102,针对每一个访问请求,请求处理服务根据访问请求对HDF5文件进行访问,得到与访问请求对应的访问结果;

S103,请求处理服务将访问结果发送给访问请求对应的线程。

根据本发明的一种实施方式,请求处理服务包括一个任务调度队列,用于存储多个访问请求,其中,在所述任务调度队列中,根据任务调度算法确定所述多个访问请求的访问顺序,任务调度算法可以为先进先出(FIFO)算法。本发明提供任务调度队列统一对HDF5文件进行访问处理,提高了总体访问文件的效率。

根据本发明的一种实施方式,步骤S101还包括:

线程将访问请求发送至请求处理服务后,请求处理服务立即产生对应的响应消息,并将响应消息返回至线程,以使该线程执行后续任务。这样,线程在发送访问请求后,不会等待解锁信号,而是立即执行该线程中后续的任务,因此,不会造成线程阻塞。

根据本发明的一种实施方式,在步骤S103中,该请求处理服务使用委托调用相关方法将返回数据传给对应的线程。其中,委托是指只包含一 个或多个方法地址的特殊类型的对象,它可以在运行时将一个方法作为参数传递给另一个方法。

根据本发明的一种实施方式,方法还包括:

S104,请求处理服务完成访问后,若产生返回数据,则使用委托调用相关方法将返回数据传给对应的线程,返回数据可以为从HDF5文件中读取的数据等。

为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明进一步详细说明。

图2是本发明实施例提供的基于请求处理服务的HDF5文件多线程访问方法的示意图,如图2所示,在实时画图程序中,线程A进行模型计算,并每隔一定时间段发出用于访问(写入)共享HDF5文件系统的请求。线程B定时发出用于访问(读取)共享HDF5文件系统的请求,同时根据请求返回的数据进行实时绘图。请求处理服务立即返回请求的响应消息,并将线程A、B发出的访问请求缓存至任务调度队列,根据FIFO算法,请求处理服务依次处理任务调度队列中对共享HDF5文件的操作。一旦某个操作完成,请求处理服务以委托的方式通知相应的线程,如果有返回数据,也通过委托返回给相应的线程。其中,线程A、B在收到访问请求的响应消息后,线程A继续往下进行模型计算,线程B也继续往下进行实时绘图。

本实施例一方面通过任务处理服务及时响应线程A或B的访问请求,实现异步访问共享HDF5文件,从而缩短了HDF5文件系统响应访问请求所需的时间,另一方面,由任务处理服务根据FIFO算法依次处理线程A或B发出的共享HDF5文件请求,提高了线程A、B的实际运行时间和运行效率。

以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

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