CN102446117A - 多线程数据的保存方法及装置 - Google Patents
多线程数据的保存方法及装置 Download PDFInfo
- Publication number
- CN102446117A CN102446117A CN2011102628064A CN201110262806A CN102446117A CN 102446117 A CN102446117 A CN 102446117A CN 2011102628064 A CN2011102628064 A CN 2011102628064A CN 201110262806 A CN201110262806 A CN 201110262806A CN 102446117 A CN102446117 A CN 102446117A
- Authority
- CN
- China
- Prior art keywords
- thread
- preservation
- processor
- core number
- threads
- 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.)
- Granted
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种多线程数据的保存方法及装置。其中,该方法包括:读取处理器的核心数,处理器的核心数为处理器同步处理数据的最大线程数;在通过处理器的核心数确定处理器为多核的情况下,为文件中每种类型的数据流创建对应的保存线程;根据处理器的核心数启动运行一个或多个保存线程,以通过保存线程将对应的数据流保存至内存。通过本发明,能够实现在充分利用目前主流硬件性能的基础上,大大提高了文件保存速度。
Description
技术领域
本发明涉及通讯领域,具体而言,涉及一种多线程数据的保存方法及装置。
背景技术
随着应用软件的广泛应用,应用软件需要处理数据呈几何基数增长,例如三维CAD软件在制造业、装备业的广泛应用,软件所处理的数据及模型也在不断增大,由最初的几百个零件的减速器模型,到现在的几万个零部件的整车模型和大型机械总装,使得模型数据文件由原来的几百KB增加到几百MB。于是就对软件性能提出了新的要求。本文就在这种应用背景下,针对如何提高保存速度的技术方案进行了总体描述。
现有技术大多数软件都采用Windows推荐的流化处理,在文件保存时,每个零件对象都是顺序写入,即大多采用流式方式来保存文件,从头到尾写入文件数据,类似于有10个座位,10个人排成一队依次进入这10个座位,次序井然,但效率最低。
这种通过流式方式来保存数据的方式,由于文件必须从头到尾一次写完,从而在此过程中,后面数据必须等待前面数据,当数据量大时,后面数据需要等待很长时间,从而使得文件保存时间与文件大小或零件数成正比的增加,导致保存瓶颈受多个环节的影响,这是保存慢的一个重要原因。而且,这样保存的文件在读取时,当数据块有错误时,无法跳过当前错误块,导致后面数据也全部无法恢复。
目前,对于三维CAD软件处理大模型的需求越来越强烈,文件保存速度所突显出来的瓶颈效应越来越明显。一般软件使用者为防止数据丢失,都会随时保存,例如保存一个有100多个零件的减速器装配,目前主流配置的计算机只需要2秒以内,而保存一个有3万个零件的大型机械装配,同等配置的计算机需要5分钟以上。这是一般用户所无法忍受的。尽管用户可以通过提高硬件配置在一定程度上提高速度,但对于零件数上万的大装配,仅仅提升硬件配置的效果就不再那么明显了。因此,必须从软件算法上做出根本性改进,这样才能使软件在性能上有质的提升,从而满足企业的进一步的需要。另外,例如使用Word编辑文档时,就会随手按“Ctrl+S”来保存文件以防止自己修改丢失。而如果一个文件保存需要5分钟以左右时,这对软件无疑是一个致命的瓶颈。
目前针对相关技术的在数据增大的过程中由于采用流化存储而造成的数据等待、保存速度慢的问题,目前尚未提出有效的解决方案。
发明内容
针对相关技术的在数据增大的过程中由于采用流化存储而造成的数据等待、保存速度慢的问题,目前尚未提出有效的问题而提出本发明,为此,本发明的主要目的在于提供一种多线程数据的保存方法及装置,以解决上述问题。
为了实现上述目的,根据本发明的一个方面,提供了一种多线程数据的保存方法,该多线程数据的保存方法包括:读取处理器的核心数,处理器的核心数为处理器同步处理数据的最大线程数;在通过处理器的核心数确定处理器为多核的情况下,为文件中每种类型的数据流创建对应的保存线程;根据处理器的核心数启动运行一个或多个保存线程,以通过保存线程将对应的数据流保存至内存。
进一步地,根据处理器的核心数启动运行一个或多个保存线程,以通过保存线程将对应的数据流保存至内存包括:判断处理器的核心数是否大于等于保存线程的数目,其中,在核心数大于等于保存线程的数目的情况下,启动运行所有的保存线程以将对应的数据流保存至内存;在核心数小于保存线程的数目的情况下,启动运行与核心数相同数目的保存线程,并将未启动运行的保存线程保存至等待队列。
进一步地,在启动运行与核心数相同数目的保存线程,并将未启动运行的保存线程保存至等待队列之后,方法还包括:检测已经启动运行的保存线程是否运行结束,其中,在已经启动运行的保存线程运行结束的情况下,启动等待队列中的保存线程;在已经启动运行的保存线程未运行结束的情况下,继续运行正在运行的保存线程,直至运行结束。
进一步地,在启动运行与核心数相同数目的保存线程,并将未启动运行的保存线程保存至等待队列之后,方法还包括:在已经启动运行的保存线程运行结束时,系统释放已经运行结束的保存线程所占用的空间,并发送启动命令至等待队列;根据启动命令来启动运行等待队列中的保存线程。
为了实现上述目的,根据本发明的一个方面,提供了一种多线程数据的保存方法,该多线程数据的保存方法包括:读取处理器的核心数,处理器的核心数为处理器同步处理数据的最大线程数;在通过处理器的核心数确定处理器为多核的情况下,根据处理器的核心数为文件中一个或多个类型的数据流创建对应的保存线程;启动运行已经创建的所有保存线程,以通过保存线程将对应的数据流保存至内存,并检测处理器中正在运行的一个或多个保存线程的运行状态,根据运行结果处理文件中的其他保存线程。
进一步地,根据处理器的核心数为文件中一个或多个类型的数据流创建对应的保存线程包括:按照处理器的核心数来创建与核心数相同数目的保存线程,每一个保存线程对应一种类型的数据流。
进一步地,检测处理器中正在运行的一个或多个保存线程的运行状态,根据运行结果处理文件中的其他保存线程包括:检测到正在运行的保存线程中任意一个或多个保存线程处于运行结束的状态下,则创建并启动运行文件中的其他保存线程;或检测到正在运行的保存线程都处于未运行结束的状态下,创建文件中的其他保存线程,并将新创建的保存线程保存至等待队列。
进一步地,在将新创建的保存线程保存至等待队列之后,方法还包括:在任意一个正在运行的保存线程运行结束时,系统释放已经运行结束的保存线程所占用的空间,并发送启动命令至等待队列;根据启动命令来启动运行等待队列中的保存线程。
进一步地,在将新创建的保存线程保存至等待队列之后,方法还包括:检测已经启动运行的保存线程是否运行结束,其中,在已经启动运行的保存线程运行结束的情况下,启动等待队列中的保存线程;在已经启动运行的保存线程未运行结束的情况下,继续运行正在运行的保存线程,直至运行结束。
为了实现上述目的,根据本发明的另一方面,提供了一种多线程数据的保存装置,该多线程数据的保存装置包括:读取模块,用于读取处理器的核心数,处理器的核心数为处理器同步处理数据的最大线程数;创建模块,用于在通过处理器的核心数确定处理器为多核的情况下,为文件中每种类型的数据流创建对应的保存线程;运行保存模块,用于根据处理器的核心数启动运行一个或多个保存线程,以通过保存线程将对应的数据流保存至内存。
进一步地,运行保存模块包括:第一判断模块,用于判断处理器的核心数是否大于等于保存线程的数目;第一启动模块,用于在核心数大于等于保存线程的数目的情况下,启动运行所有的保存线程以将对应的数据流保存至内存;第二启动模块,用于在核心数小于保存线程的数目的情况下,启动运行与核心数相同数目的保存线程,并将未启动运行的保存线程保存至等待队列。
进一步地,装置还包括:检测模块,用于检测已经启动运行的保存线程是否运行结束;第三启动模块,用于在已经启动运行的保存线程运行结束的情况下,启动等待队列中的保存线程;运行模块,用于在已经启动运行的保存线程未运行结束的情况下,继续运行正在运行的保存线程,直至运行结束。
进一步地,装置还包括:第一处理模块,用于在已经启动运行的保存线程运行结束时,系统释放已经运行结束的保存线程所占用的空间,并发送启动命令至等待队列;第四启动模块,用于根据启动命令来启动运行等待队列中的保存线程。
为了实现上述目的,根据本发明的另一方面,提供了一种多线程数据的保存装置,该多线程数据的保存装置包括:读取模块,用于读取处理器的核心数,处理器的核心数为处理器同步处理数据的最大线程数;创建模块,用于在通过处理器的核心数确定处理器为多核的情况下,根据处理器的核心数为文件中一个或多个类型的数据流创建对应的保存线程;运行保存模块,用于启动已经创建的所有保存线程,以通过保存线程将对应的数据流保存至内存,并检测处理器中正在运行的一个或多个保存线程的运行状态,根据运行结果处理文件中的其他保存线程。
进一步地,运行保存模块包括:第二检测模块,用于检测到正在运行的保存线程中任意一个或多个保存线程处于运行结束的状态下,则创建并启动运行文件中的其他保存线程;第三检测模块,用于检测到正在运行的保存线程都处于未运行结束的状态下,创建文件中的其他保存线程,并将新创建的保存线程保存至等待队列。
进一步地,装置还包括:第二处理模块,用于在任意一个正在运行的保存线程运行结束时,系统释放已经运行结束的保存线程所占用的空间,并发送启动命令至等待队列;第五启动模块,用于根据启动命令来启动运行等待队列中的保存线程。
通过本发明,采用读取处理器的核心数,处理器的核心数为处理器同步处理数据的最大线程数;在通过处理器的核心数确定处理器为多核的情况下,为文件中每种类型的数据流创建对应的保存线程;根据处理器的核心数启动运行一个或多个保存线程,以通过保存线程将对应的数据流保存至内存,解决了相关现有技术在数据增大的过程中由于采用流化存储而造成的数据等待、保存速度慢的问题,进而实现在充分利用目前主流硬件性能的基础上,大大提高了文件保存速度的效果。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是根据本发明实施例的多线程数据的保存装置的结构示意图;
图2是根据本发明实施例的用专用工具查看CAXA CAD实体设计文件中的数据流的截屏图;
图3是根据本发明实施例的一种多线程数据的保存方法的流程图;
图4是根据本发明实施例的另一种多线程数据的保存方法的流程图;
图5是根据图3所示的实施例的多线程数据的保存方法的详细流程图;以及
图6是根据图4所示的实施例的多线程数据的保存方法的详细流程图。
具体实施方式
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本发明。
图1是根据本发明实施例的多线程数据的保存装置的结构示意图。
如图1所示,该装置可以包括:读取模块10、创建模块30和运行保存模块50。
其中,读取模块10,用于读取处理器的核心数,处理器的核心数为处理器同步处理数据的最大线程数;创建模块30,用于在通过处理器的核心数确定所述处理器为多核的情况下,为文件中每种类型的数据流创建对应的保存线程;运行保存模块50,用于根据处理器的核心数启动运行一个或多个保存线程,以通过保存线程将对应的数据流保存至内存。
本申请上述实施例在确定系统所用的处理器是多核处理器之后,在保存数据流之前,基于文件本身固有性质来通过创建多线程的方式保存文件,即对于同样大小的数据,不再以按前的方式用一条线来保存,而是会同时开启2条或4条线程进行同时保存,这种充分利用目前主流硬件性能的基础上,大大提高了文件保存速度,实施过程中具体同时开启多少条线程进行保存,是基于处理器的核心数。仍然采用前面的那个例子,比如有10个座位要安排给10个人座,新的技术方案会把这10个座位分成两排1-5号和610号,10个人分成两队,同时进入这两排座位,这样所用的时间就会是原来的50%。
本发明在实施的过程中,上述功能模块还可以为下述实施方式:读取模块10,用于读取处理器的核心数,处理器的核心数为处理器同步处理数据的最大线程数;创建模块30,用于在通过处理器的核心数确定该处理器为多核的情况下,根据处理器的核心数为文件中一个或多个类型的数据流创建对应的保存线程;运行保存模块50,用于启动已经创建的所有保存线程,以通过保存线程将对应的数据流保存至内存,并检测处理器中正在运行的一个或多个保存线程的运行状态,根据运行结果处理文件中的其他保存线程。
上述实施例达到了充分利用目前主流硬件性能且大大提高了文件保存速度的效果的同时,由于在运行保存线程之前,创建模块30根据需要仅创建适当的保存线程(例如当处理器为双核处理器时,仅创建两条保存线程),而不是创建该文件中的所有的保存线程,因此节省了系统资源。
具体的,本申请上述实施例中涉及到的创建模块30实现的方案,主要针对文件本身固有的特性,即文件本身的文件结构来创建保存线程,这里的文件结构相当于上面例子中的“座位”。以前制约保存速度的一个原因就是文件结构是流式的,相当于只有一排座位,我们需要把它改造成类似“多排座位”的文件结构。这种文件结构目前主流有两种:
复合文档技术:这种技术已比较成熟,微软的Word 2003及以前版本都采用这种方式。这是一项公开的技术,在微软的开发工具Visual Studio中一直带着它的开发库(SDK)。使用这些开发库就可以保存成这种文档。图1就是使用专门工具查看一个Word2003文件的结构。它里面分为多个Stream(流),每个Stream相当于座位中的一排。这个例子中它里面分为“Data”,“lTable”等6个Stream,也就是说,它最多可以支持6个线程同时写入。
Open XML技术:这项技术因为首先在微软的Office 2007中使用,也有人称它为OfficeOpen XML或者Office XML。它本质上就是将多个XML文件使用Zip技术压了一个包。例如,如果我们把docx文件的扩展名改为zip,然后解压它,就能看到许多XML文件。每个XML文件相当于座位中的一排。图2就是将一个docx文件使用WinRAR解压之后看到的内容,它里面包含多个子目录和多个XML文件。
图2是根据本发明实施例的用专用工具查看CAXA CAD实体设计文件中的数据流的截屏图。下面本申请以CAXA CAD为例来描述创建模块30创建保存线程的过程,由于已知CAXA CAD实体设计的文件的数据流主要分为以下几种类型:预览数据流(Preview):存放一个位图文件,预览时使用,比如Windows资源管理器中以缩略图方式显示时就会用到它;显示数据流(HSF):存放专门的显示数据,可以在专用的浏览器中调用,这个浏览器可以实现对三维模型缩放、旋转等不同方式的查看;核心数据流(Shape Data):这里用来存放零件的核心数据,包括几何定义,位置、尺寸等;材料数据流(Public Access):除几何数据外,零件还有许多材料数据和物理数据,比如质量、体积等。因此,就可以针对这四种类型的数据流事先建立保存线程,或者,为了更节省系统资源,也可以根据处理器的核心数来创建数目合理的保存线程。
图3是根据本发明实施例的一种多线程数据的保存方法的流程图,如图3所示该方法包括如下步骤:
步骤S102,通过图1所示的实施例中的读取模块10来读取处理器的核心数,处理器的核心数为处理器同步处理数据的最大线程数。
步骤S104,通过图1所示的实施例中的创建模块30实现在通过处理器的核心数确定该处理器为多核的情况下,为文件中每种类型的数据流创建对应的保存线程。
步骤S106,通过图1所示的实施例中的运行保存模块50来执行根据处理器的核心数启动运行一个或多个保存线程,以通过保存线程将对应的数据流保存至内存。
本申请上述实施例在确定系统所用的处理器是多核处理器之后,在保存数据流之前,基于文件本身固有性质来通过创建多线程的方式保存文件,即对于同样大小的数据,不再以按前的方式用一条线来保存,而是会同时开启2条或4条线程进行同时保存,这种充分利用目前主流硬件性能的基础上,大大提高了文件保存速度,实施过程中具体同时开启多少条线程进行保存,是基于处理器的核心数来确定的。
本申请上述实施例中步骤S106根据处理器的核心数运行一个或多个保存线程,以通过保存线程将对应的数据流保存至内存的步骤可以包括:判断处理器的核心数是否大于等于保存线程的数目,其中,在核心数大于等于保存线程的数目的情况下,启动运行所有的保存线程以将对应的数据流保存至内存;在核心数小于保存线程的数目的情况下,启动运行与核心数相同数目的保存线程,并将未启动运行的保存线程保存至等待队列。
本发明上述步骤S106的实施过程中,还可以实现,在任何情况下都启动运行所有的保存线程,将优先级高的保存线程先进性处理,其它的保存线程处于等待状态,或者也可以一次就启动运行其中一个保存线程,在该保存线程运行完毕之后,再开启运行其它的保存线程。
优选地,在上述实施例中,在启动运行与核心数相同数目的保存线程,并将未启动运行的保存线程保存至等待队列之后,方法还包括:检测已经启动运行的保存线程是否运行结束,其中,在已经启动运行的保存线程运行结束的情况下,启动等待队列中的保存线程;在已经启动运行的保存线程未运行结束的情况下,继续运行正在运行的保存线程,直至运行结束。该实施例实现的方案采用实时或定时监测保存线程的运行结果,根据获得的运行结果来确定启动运行处于等待状态的保存线程。
优选地,在上述实施例中,在启动运行与核心数相同数目的保存线程,并将未启动运行的保存线程保存至等待队列之后,方法还可以包括:在已经启动运行的保存线程运行结束时,系统释放已经运行结束的保存线程所占用的空间,并发送启动命令至等待队列;根据启动命令来启动运行等待队列中的保存线程。该实施例实现的方案不同于实时或定时检测运行结果的方式,系统在运行完成一个保存线程之后自动启动等待队列中的保存线程,相比较而言系统保存数据的效率更高。
图4是根据本发明实施例的另一种多线程数据的保存方法的流程图。如图4所示该方法包括如下步骤:
步骤S202,通过图1所示的实施例中的读取模块10来读取处理器的核心数,处理器的核心数为处理器同步处理数据的最大线程数。
步骤S204,通过图1所示的实施例中的创建模块30实现在通过处理器的核心数确定该处理器为多核的情况下,根据处理器的核心数为文件中一个或多个类型的数据流创建对应的保存线程。
步骤S206,通过图1所示的实施例中的运行保存模块50来执行启动运行已经创建的所有保存线程,以通过保存线程将对应的数据流保存至内存,并检测处理器中正在运行的一个或多个保存线程的运行状态,根据运行结果处理文件中的其他保存线程。
本申请上述实施例在确定系统所用的处理器是多核处理器之后,在保存数据流之前,基于文件本身固有性质来通过创建多线程的方式保存文件,即对于同样大小的数据,不再以按前的方式用一条线来保存,而是会同时开启2条或4条线程进行同时保存,这种充分利用目前主流硬件性能的基础上,大大提高了文件保存速度,实施过程中具体同时开启多少条线程进行保存,是基于处理器的核心数来确定的。
上述实施例达到了充分利用目前主流硬件性能且大大提高了文件保存速度的效果的同时,由于在运行保存线程之前,创建模块30根据需要仅创建适当的保存线程(例如当处理器为双核处理器时,仅创建两条保存线程),而不是创建该文件中的所有的保存线程,因此节省了系统资源。
上述步骤S204中的根据处理器的核心数为文件中一个或多个类型的数据流创建对应的保存线程包括:按照处理器的核心数来创建与核心数相同数目的保存线程,每一个保存线程对应一种类型的数据流。这种实施方式在满足了多线程保存数据的同时,还高效的完全利用了系统资源。
本发明上是实施例步骤S206,并检测处理器中正在运行的一个或多个保存线程的运行状态,根据运行结果处理文件中的其他保存线程包括:检测到正在运行的保存线程中任意一个或多个保存线程处于运行结束的状态下,则创建并启动运行文件中的其他保存线程;或检测到正在运行的保存线程都处于未运行结束的状态下,创建文件中的其他保存线程,并将新创建的保存线程保存至等待队列。
优选地,在将新创建的保存线程保存至等待队列之后,方法还可以包括如下实施步骤:在任意一个正在运行的保存线程运行结束时,系统释放已经运行结束的保存线程所占用的空间,并发送启动命令至等待队列;根据启动命令来启动运行等待队列中的保存线程。
优选地,在将新创建的保存线程保存至等待队列之后,方法还可以包括如下的另一种实施步骤:检测已经启动运行的保存线程是否运行结束,其中,在已经启动运行的保存线程运行结束的情况下,启动等待队列中的保存线程;在已经启动运行的保存线程未运行结束的情况下,继续运行正在运行的保存线程,直至运行结束。
图5是根据图3所示的实施例的多线程数据的保存方法的详细流程图;以及图6是根据图4所示的实施例的多线程数据的保存方法的详细流程图。
如图5所示的,以CAXA CAD实体设计文件中的数据流为例,实现多线程存储流程实施方式,为了便于说明,本实施例为每个线程起名分别的A,B,C,D。且在创建完毕线程后,这个线程可会有两种状态:马上运行,或者进入等待状态,此时重点要明确的是,创建完线程后,不一定马上运行。包括如下步骤:
(1)判断CPU核心数:即获取当前计算机的CPU是单核、双核、四核或更高。如果是单核,那么只允许同时运行一个线程,如果是双核,允许同时运行两个线程,如果是四核,允许同时运行四个线程,以此类推。这样是为了充分发挥CPU的能力,如果单核CPU同时运行两个或四个线程的话,最终反而会使速度变慢。本实施例以双核处理器为例进行描述。
(2)同时创建该CAD文件中四种数据流对应的保存线程。
其中,包括:创建保存核心保存线程A:创建一个线程,用来保存核心数据到内存中的Stream中。
创建保存材料保存线程B:创建一个线程,用来保存几何数据到内存中的Stream中。
创建保存显示保存线程C:创建一个线程,用来保存显示数据到内存中的Stream中。
创建保存预览图线程D:创建一个线程,用来保存预览图数据到内存中的Stream中。
(3)在本实施例中处理器为双核处理器的情况下,此时创建的保存线程大于双核处理器的核心数,此时,启动运行与核心数相同数目的保存线程,即启动两个保存线程(例如A和B),并将未启动运行的保存线程(例如C和D)保存至等待队列。
(4)在已经运行的两个保存线程A和B运行完毕之后,开始启动运行保存线程C和D
(5)在等待所有线程运行完毕之后,最后一次性将文件写入硬盘。
如图6所示的,以CAXA CAD实体设计文件中的数据流为例,实现多线程存储流程实施方式,为了便于说明,本实施例为每个线程起名分别的A,B,C,D。且在创建完毕线程后,这个线程可会有两种状态:马上运行,或者进入等待状态,此时重点要明确的是,创建完线程后,不一定马上运行。下面以双核CPU为例详细说明如下步骤:
(1)判断CPU核心数:即获取当前计算机的CPU是单核、双核、四核或更高。如果是单核,那么只允许同时运行一个线程,如果是双核,允许同时运行两个线程,如果是四核,允许同时运行四个线程,以此类推。这样是为了充分发挥CPU的能力,如果单核CPU同时运行两个或四个线程的话,最终反而会使速度变慢。本实施例以双核处理器为例进行描述。
(2)如果是双核CPU,那么定义允许同时运行线程的最大数目是2,首先创建保存核心保存线程A:即创建一个线程,用来保存核心数据到内存中的Stream中,创建完线程A,检查到允许同时运行最大线程数是2,当前实际运行线程数目是0,此时马上启动线程A运行。
(3)然后创建保存材料保存线程B:即创建一个线程,用来保存几何数据到内存中的Stream中,创建完线程B,检查到允许同时运行最大线程数是2,当前实际运行线程数目是1,此时马上启动线程B运行。
(4)其次,再创建保存显示保存线程C:即创建一个线程,用来保存显示数据到内存中的Stream中,创建完线程C,检查到允许同时运行最大线程数是2,当前实际运行线程数目是2,此时线程C进入等待队列。
(5)最后创建保存预览图线程D:即创建一个线程,用来保存预览图数据到内存中的Stream中。创建完线程D,检查到允许同时运行最大线程数是2,当前实际运行线程数目是2,此时线程D也进入等待队列。
(6)进入等待状态,等待所有线程运行完毕。具体地,此时检查共创建了4个线程,而已运行完线程数是0,继续等待。此时如果线程A运行完毕,将已运行完线程数加1,同时检测等待队列中在排队的线程,发现排在队首的是线程C,此时运行线程C。依此类推,线程B运行完后,将已运行完线程数加1,然后运行等待队列中的线程D,当线程C、D都运行完之后,已运行完线程数等于4,与创建线程数相同,并且等待队列为空,此时进入下一步。
(7),将以上A,B,C,D四个线程保存的数据写入磁盘,文件保存完毕。。
需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
本发明上述各种实施方式也适用于WORD等其它工具类的应用软件的文件,由于各类文件的文件结构中的数据流的类型划分是固定的,因此,系统设计人员可以依据固定的文件结构来创建各类数据流所对应的保存线程,本发明通用性较好。
从以上的描述中,可以看出,本发明实现了如下技术效果:本发明基于多线程的文件保存技术,借助多线程技术和目前高速发达的硬件技术,可以使文件保存速度成倍提升,大大提高了文件保存速度,充分利用了目前主流硬件性能,根据处理器的核心数可以实现保存速度提高2倍、4倍或更高。本申请实现的多线程文件保存技术。解决了大文件保存过慢的问题,实际应用过程中可以使保存速度提高50%以上。使得三维CAD软件在技术上不断适应应用上的需求,为企业生产提供有力的技术保障。
显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (11)
1.一种多线程数据的保存方法,其特征在于,包括:
读取处理器的核心数,所述处理器的核心数为所述处理器同步处理数据的最大线程数;
在通过所述处理器的核心数确定所述处理器为多核的情况下,为文件中每种类型的数据流创建对应的保存线程;
根据所述处理器的核心数启动运行一个或多个所述保存线程,以通过所述保存线程将对应的数据流保存至内存。
2.根据权利要求1所述的方法,其特征在于,根据所述处理器的核心数启动运行一个或多个所述保存线程,以通过所述保存线程将对应的数据流保存至内存包括:
判断所述处理器的核心数是否大于等于所述保存线程的数目,其中,
在所述核心数大于等于所述保存线程的数目的情况下,启动运行所有的保存线程以将对应的数据流保存至内存;
在所述核心数小于所述保存线程的数目的情况下,启动运行与所述核心数相同数目的保存线程,并将未启动运行的保存线程保存至等待队列。
3.根据权利要求2所述的方法,其特征在于,在启动运行与所述核心数相同数目的保存线程,并将未启动运行的保存线程保存至等待队列之后,所述方法还包括:
检测已经启动运行的保存线程是否运行结束,其中,
在已经启动运行的保存线程运行结束的情况下,启动所述等待队列中的保存线程;
在已经启动运行的保存线程未运行结束的情况下,继续运行正在运行的保存线程,直至运行结束。
4.根据权利要求2所述的方法,其特征在于,在启动运行与所述核心数相同数目的保存线程,并将未启动运行的保存线程保存至等待队列之后,所述方法还包括:
在已经启动运行的保存线程运行结束时,系统释放已经运行结束的保存线程所占用的空间,并发送启动命令至所述等待队列;
根据所述启动命令来启动运行所述等待队列中的保存线程。
5.一种多线程数据的保存方法,其特征在于,包括:
读取处理器的核心数,所述处理器的核心数为所述处理器同步处理数据的最大线程数;
在通过所述处理器的核心数确定所述处理器为多核的情况下,根据所述处理器的核心数为文件中一个或多个类型的数据流创建对应的保存线程;
启动运行已经创建的所有保存线程,以通过所述保存线程将对应的数据流保存至内存,并检测处理器中正在运行的一个或多个所述保存线程的运行状态,根据所述运行结果处理所述文件中的其他保存线程。
6.根据权利要求5所述的方法,其特征在于,根据所述处理器的核心数为文件中一个或多个类型的数据流创建对应的保存线程包括:
按照所述处理器的核心数来创建与所述核心数相同数目的保存线程,每一个保存线程对应一种类型的数据流。
7.根据权利要求5或6所述的方法,其特征在于,检测处理器中正在运行的一个或多个所述保存线程的运行状态,根据所述运行结果处理所述文件中的其他保存线程包括:
检测到正在运行的保存线程中任意一个或多个保存线程处于运行结束的状态下,则创建并启动运行所述文件中的其他保存线程;或
检测到正在运行的保存线程都处于未运行结束的状态下,创建所述文件中的其他保存线程,并将新创建的保存线程保存至等待队列。
8.根据权利要求7所述的方法,其特征在于,在将新创建的保存线程保存至等待队列之后,所述方法还包括:
在任意一个正在运行的保存线程运行结束时,系统释放已经运行结束的保存线程所占用的空间,并发送启动命令至所述等待队列;
根据所述启动命令来启动运行所述等待队列中的保存线程。
9.根据权利要求7所述的方法,其特征在于,在将新创建的保存线程保存至等待队列之后,所述方法还包括:
检测已经启动运行的保存线程是否运行结束,其中,
在已经启动运行的保存线程运行结束的情况下,启动所述等待队列中的保存线程;
在已经启动运行的保存线程未运行结束的情况下,继续运行正在运行的保存线程,直至运行结束。
10.一种多线程数据的保存装置,其特征在于,包括:
读取模块,用于读取处理器的核心数,所述处理器的核心数为所述处理器同步处理数据的最大线程数;
创建模块,用于在通过所述处理器的核心数确定所述处理器为多核的情况下,为文件中每种类型的数据流创建对应的保存线程;
运行保存模块,用于根据所述处理器的核心数启动运行一个或多个所述保存线程,以通过所述保存线程将对应的数据流保存至内存。
11.一种多线程数据的保存装置,其特征在于,包括:
读取模块,用于读取处理器的核心数,所述处理器的核心数为所述处理器同步处理数据的最大线程数;
创建模块,用于在通过所述处理器的核心数确定所述处理器为多核的情况下,根据所述处理器的核心数为文件中一个或多个类型的数据流创建对应的保存线程;
运行保存模块,用于启动已经创建的所有保存线程,以通过所述保存线程将对应的数据流保存至内存,并检测处理器中正在运行的一个或多个所述保存线程的运行状态,根据所述运行结果处理所述文件中的其他保存线程。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201110262806 CN102446117B (zh) | 2011-09-06 | 2011-09-06 | 多线程数据的保存方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201110262806 CN102446117B (zh) | 2011-09-06 | 2011-09-06 | 多线程数据的保存方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102446117A true CN102446117A (zh) | 2012-05-09 |
CN102446117B CN102446117B (zh) | 2013-10-30 |
Family
ID=46008629
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 201110262806 Active CN102446117B (zh) | 2011-09-06 | 2011-09-06 | 多线程数据的保存方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102446117B (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104570926A (zh) * | 2014-12-31 | 2015-04-29 | 北京数码大方科技股份有限公司 | 用于数控系统的数据传输方法及装置 |
CN104657111A (zh) * | 2013-11-20 | 2015-05-27 | 方正信息产业控股有限公司 | 一种并行计算方法和装置 |
CN106294427A (zh) * | 2015-05-26 | 2017-01-04 | 北大方正集团有限公司 | 稿件统计方法和稿件统计系统 |
CN107577525A (zh) * | 2017-08-22 | 2018-01-12 | 努比亚技术有限公司 | 一种创建并发线程的方法、装置及计算机可读存储介质 |
CN108259243A (zh) * | 2018-01-12 | 2018-07-06 | 深圳市卓讯信息技术有限公司 | 基于微服务技术架构的数据处理方法、终端及计算机存储介质 |
CN109558249A (zh) * | 2017-09-27 | 2019-04-02 | 北京国双科技有限公司 | 一种并发操作的控制方法及装置 |
CN114519035A (zh) * | 2022-01-19 | 2022-05-20 | 上海卫星工程研究所 | 高速卫星遥测处理方法及系统 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101430639A (zh) * | 2007-11-09 | 2009-05-13 | 北大方正集团有限公司 | 一种内容体系数据流的处理方法及装置 |
US20110099284A1 (en) * | 2009-10-27 | 2011-04-28 | Verisign, Inc. | Efficient Multiple Filter Packet Statistics Generation |
-
2011
- 2011-09-06 CN CN 201110262806 patent/CN102446117B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101430639A (zh) * | 2007-11-09 | 2009-05-13 | 北大方正集团有限公司 | 一种内容体系数据流的处理方法及装置 |
US20110099284A1 (en) * | 2009-10-27 | 2011-04-28 | Verisign, Inc. | Efficient Multiple Filter Packet Statistics Generation |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104657111A (zh) * | 2013-11-20 | 2015-05-27 | 方正信息产业控股有限公司 | 一种并行计算方法和装置 |
CN104570926A (zh) * | 2014-12-31 | 2015-04-29 | 北京数码大方科技股份有限公司 | 用于数控系统的数据传输方法及装置 |
CN104570926B (zh) * | 2014-12-31 | 2017-10-27 | 北京数码大方科技股份有限公司 | 用于数控系统的数据传输方法及装置 |
CN106294427A (zh) * | 2015-05-26 | 2017-01-04 | 北大方正集团有限公司 | 稿件统计方法和稿件统计系统 |
CN107577525A (zh) * | 2017-08-22 | 2018-01-12 | 努比亚技术有限公司 | 一种创建并发线程的方法、装置及计算机可读存储介质 |
CN107577525B (zh) * | 2017-08-22 | 2020-11-17 | 努比亚技术有限公司 | 一种创建并发线程的方法、装置及计算机可读存储介质 |
CN109558249A (zh) * | 2017-09-27 | 2019-04-02 | 北京国双科技有限公司 | 一种并发操作的控制方法及装置 |
CN109558249B (zh) * | 2017-09-27 | 2022-11-04 | 北京国双科技有限公司 | 一种并发操作的控制方法及装置 |
CN108259243A (zh) * | 2018-01-12 | 2018-07-06 | 深圳市卓讯信息技术有限公司 | 基于微服务技术架构的数据处理方法、终端及计算机存储介质 |
CN114519035A (zh) * | 2022-01-19 | 2022-05-20 | 上海卫星工程研究所 | 高速卫星遥测处理方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN102446117B (zh) | 2013-10-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102446117B (zh) | 多线程数据的保存方法及装置 | |
US10474471B2 (en) | Methods and systems for performing a replay execution | |
EP3185143B1 (en) | Decentralized transaction commit protocol | |
EP3185142A1 (en) | Distributed database transaction protocol | |
US20110231389A1 (en) | Adaptive row-batch processing of database data | |
CN111124641B (zh) | 一种利用多线程的数据处理方法及系统 | |
CN110472102A (zh) | 一种数据处理方法、装置、设备和存储介质 | |
US10002147B2 (en) | Merging of sorted lists using array pair | |
US9245003B2 (en) | Method and system for memory efficient, update optimized, transactional full-text index view maintenance | |
US7720839B2 (en) | Replacing an unavailable element in a query | |
CN112650599A (zh) | 一种日志处理方法、设备及存储介质 | |
CN103020003A (zh) | 面向多核程序确定性重演的内存竞争记录装置及其控制方法 | |
US20120059997A1 (en) | Apparatus and method for detecting data race | |
US20080320275A1 (en) | Concurrent exception handling | |
US10620660B2 (en) | Efficient timestamp solution for analyzing concurrent software systems | |
EP3977302A1 (en) | Providing access to state information associated with operators in a data processing system | |
CN110727666A (zh) | 面向工业互联网平台的缓存组件、方法、设备及存储介质 | |
WO2021238261A1 (zh) | 一种基于lookup操作的多线程消息处理方法 | |
Paksula | Persisting objects in redis key-value database | |
KR102449016B1 (ko) | 이벤트를 지원하지 않는 비동기식 병렬처리를 통한 입출력 리소스 절감 방법 및 그 병렬처리 장치 | |
Lin et al. | Ray-based Elastic Distributed Data Parallel Framework with Distributed Data Cache | |
CN118152079A (zh) | 任务编排调度方法、装置、计算机设备、存储介质和产品 | |
CN108604192B (zh) | 用于执行等待事件要被记录时的一个或多个任务的系统、方法及介质 | |
US20140330823A1 (en) | Storing changes made toward a limit | |
US20210064623A1 (en) | Virtual widget container |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C53 | Correction of patent of invention or patent application | ||
CB02 | Change of applicant information |
Address after: 100080, Room 802, satellite building, No. 63, Zhichun Road, Beijing, Haidian District Applicant after: Beijing CAXA Technology Co., Ltd. Address before: 100080, Room 802, satellite building, No. 63, Zhichun Road, Beijing, Haidian District Applicant before: Beijing Digital Dafang Technology Co., Ltd. |
|
COR | Change of bibliographic data |
Free format text: CORRECT: APPLICANT; FROM: BEIJING DIGITAL DAFANG TECHNOLOGY CO., LTD. TO: CAXA TECHNOLOGY CO., LTD. |
|
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |