数据处理的方法及系统与流程

文档序号:12362724阅读:125来源:国知局
数据处理的方法及系统与流程
本申请涉及计算机
技术领域
,尤其涉及一种数据处理的方法及系统。
背景技术
:线程(Thread),有时被称为轻量级进程(LightweightProcess,LWP),是程序执行流的最小单元。线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,与同属一个进程的其它线程共享进程所拥有的全部系统资源(例如,CPU和内存)。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。在一个程序中,可以定义多个线程并发,每个线程可以执行不同的任务。例如,某一程序有两个线程并发执行。线程1要执行{y=1;x=y;}//将数值1赋予变量y;将变量y的数值赋予变量x。线程2要执行{y=2;y=3;}//将数值2赋予变量y;将数值3赋予变量y。假设它们按如下时间顺序执行:TimeThread1Thread20y=11y=22x=y3y=3执行的结果为x=2,y=3。与先执行线程1,后执行线程2得到的结果x=1,y=3不同。为了解决这种多个线程对同一块内存的数据访问时的冲突,现有技术中采用锁机制。现有技术的锁机制,通过给某一线程处理的内存数据加锁,在加锁期间禁止其它进程的写操作,从而避免数据访问的冲突问题。例如,上述例子中,现有技术将线程1处理期间涉及的内存数据进行锁定;直至线程1执行完毕,线程1执行完毕后解除锁定。然后再执行线程2。类似的,线程2执行加锁处理,直至线程2执行完毕。类似的,多个线程对同一块内存的文件访问也存在冲突的问题。在实现现有技术过程中,发明人发现现有技术中至少存在如下问题:现有技术线程处理中的锁机制,将对内存数据的处理锁定在当前执行操作的线程,而其它需要对同一内存数据排队执行的线程,需要一直等待,直至前一线程对该内存数据的处理执行完毕。这样,现有技术中的锁机制导致不同线程对同一内存数据不能并行处理,线程的等待消耗大量时间,从而导致数据处理效率低。技术实现要素:本申请实施例提供一种数据处理效率高的方法,具体的,一种数据处理的方法,包括以下步骤:按照拆分规则,拆分待处理文件形成若干子文件;启动预设数量的线程,根据线程加载规则,调度第一线程加载并处理第一子文件;判断第一线程的当前状态是否为就绪或阻塞状态;如果第一线程的当前状态是就绪或阻塞状态,调度第一线程释放第一子文件,调度第一线程加载并处理第二子文件。本申请实施例还提供一种数据处理的方法,包括以下步骤:启动预设数量的线程,根据线程加载规则,调度第一线程加载并处理第一子文件;判断第一线程的当前状态是否为就绪或阻塞状态;如果第一线程的当前状态是就绪或阻塞状态,调度第一线程释放第一子文 件,调度第一线程加载并处理第二子文件。本申请实施例还提供一种数据处理的系统,包括:拆分模块,用于按照拆分规则,拆分待处理文件形成若干子文件;调度模块,用于:启动预设数量的线程,根据线程加载规则,调度第一线程加载并处理第一子文件;判断第一线程的当前状态是否为就绪或阻塞状态;如果第一线程的当前状态是就绪或阻塞状态,调度第一线程释放第一子文件,调度第一线程加载并处理第二子文件。本申请实施例还提供一种数据处理的系统,包括:调度模块,用于:启动预设数量的线程,根据线程加载规则,调度第一线程加载并处理第一子文件;判断第一线程的当前状态是否为就绪或阻塞状态;如果第一线程的当前状态是就绪或阻塞状态,调度第一线程释放第一子文件,调度第一线程加载并处理第二子文件。本申请实施例提供的数据处理的方法和系统,至少具有如下有益效果:如果第一线程的当前状态是就绪或阻塞状态,调度第一线程释放第一子文件,调度第一线程加载并处理第二子文件,从而减少了第一线程的闲置,提高了线程的利用率,进而提高了数据处理效率。附图说明此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:图1为本申请实施例提供的数据处理的方法的流程图。图2为本申请实施例提供的将待处理文件依照预设字符长度拆分为若干子文件的流程图。图3为本申请实施例提供的另一种数据处理的方法的流程图。图4为本申请实施例提供的是服务器与客户端通讯的工作流程图。图5为本申请实施例提供的数据处理的系统的结构示意图。具体实施方式为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。图1为本申请实施例提供的数据处理的方法的流程图,具体包括以下步骤:S100:按照拆分规则,拆分待处理文件形成若干子文件。在本申请实施例中,系统将待处理文件根据文件自身的结构拆分为若干子文件。例如,对于待处理文件具有章节目录或章节标记等结构标识,根据结构标识,系统将待处理文件拆分为若干子文件。或者,对于待处理文件具有列表形式时,根据列表中的行标签和/或列标签,系统将待处理文件拆分为若干子文件。该种根据待处理文件自身的结构拆分待处理文件的拆分方法,拆分得到的子文件完整度高,便于后续处理。在本申请提供的另一种实施方式中,还可以根据文件内容的长度将待处理文件拆分为若干子文件。进一步的,当拆分出来的文件不完整时,在本申请提供的另一种实施方式中可以包括以下步骤,请参见图2,具体的:S101:将待处理文件依照预设字符长度拆分为若干中间文件。系统将待处理文件依照预设字符长度拆分为若干中间文件。例如,每4096个字符,拆分成一个中间文件。S102:校验中间文件的首末位,当首位不是适格的首位时,向前延伸一定数量的字符,从中找到适格的首位;当末位不是适格的末位时,向后延伸一定数量的字符,从中找到适格的末位;S103:设定中间文件适格的首末位为子文件的首末位形成子文件。首先,系统将待处理文件依照预设字符长度拆分为若干中间文件。然后,系统对中间文件的首末位进行校验。当首位不是适格的首位时,系统向前延伸一定数量的字符,从中找到适格的首位;当末位不是适格的末位时,系统向后延伸一定数量的字符,从中找到适格的末位。该种依照预设字符长度拆分待处理文件的方法,适用于文件无固定格式的情形,直接按照字符的长度拆分,拆分效率高。在本申请提供的一种实施例中,系统定位到中间文件的首位,向前查找一个字符,判断该字符是否为句号、段落标记、制表符、省略号等适格的末位,当该字符不是适格的末位时,则向前延伸一定数量的字符,从中找到适格的末位,然后将适格的末位的下一个字符作为适格的首位。系统定位到中间文件的末位,判断该字符是否为句号、段落标记、制表符、省略号等适格的末位,当该字符不是适格的末位时,则向后延伸一定数量的字符,从中找到适格的末位。设定中间文件适格的首末位为子文件的首末位形成子文件。S200:启动预设数量的线程,根据线程加载规则,调度第一线程加载并处理第一子文件。系统启动预设数量的线程。系统在执行程序时,都至少有一个通常称之为主线程的线程在执行。主线程可以创建出另外的线程。创建多线程的方法可以有继承Thread类、实现Runnable接口两种方式。系统通过继承Thread类、实现Runnable接口两种方式,启动预设数量的线程。启动预设数量的线程后,根据线程加载规则,系统调度第一线程加载并处 理第一子文件。具体的,系统通过调度模块20来协调、管理线程之间的调度和执行任务。调度模块20调度第一线程执行任务,根据线程加载规则,第一线程可以使用RandomAccessFile的seek函数直接定位到第一子文件的起点位置加载第一子文件。应当指出的是,线程随机加载子文件是本申请实施例提供的一种线程加载规则,不应当理解为对本申请保护范围的实质性限缩。基于实际情形,本申请在实施时,还可以设定子文件的优先级,由线程根据优先级顺序依次加载子文件。当然,基于实际情形,采用其他合理的线程加载规则,使线程加载子文件也是可以的。S300:判断第一线程的当前状态是否为就绪或阻塞状态。第一线程可以具有新线程态(newthread)、就绪(runnable)、运行(running)、阻塞(blocked)、死亡态(dead)五种状态。其中,当线程处于新线程态时,仅仅是一个空线程对象,它还没有分配到系统资源,因此只能启动或终止它,任何其他操作都会引发异常。就绪状态下,第一线程什么时候运行取决调度模块20将系统资源分配给第一线程。运行状态下,第一线程获得了调度模块20分配的系统资源进行任务的处理,可以包括这里的第一子文件的处理。阻塞状态下,第一线程在等待一个事件(如某个信号量),逻辑上不可执行。在就绪或阻塞两种状态下,第一子文件处于待处理状态;而在运行状态下,第一子文件处于在处理状态。当线程处于死亡态时,终止处理所有任务。因此,通常可以考虑线程处于就绪(runnable)、运行(running)、阻塞(blocked)三种基本状态。调度模块20可以根据对线程的调度记录确定第一线程当前的状态。S400:如果第一线程的当前状态是就绪或阻塞状态,调度第一线程释放第一子文件,调度第一线程加载并处理第二子文件。当第一线程的处于就绪或阻塞状态时,系统调度第一线程释放第一子文件,调度第一线程加载并处理第二子文件,从而减少了第一线程的闲置,提高了线程的利用率,进而提高了数据处理效率。请参见图3,为本申请实施例的一种替代实施方式,不同之处在于,按照拆分规则,拆分待处理文件形成若干子文件由客户端的计算机完成,或者,由第三方的计算机完成。输入/输出阻塞是线程阻塞的一个原因。请参照图4,是服务器与客户端通讯的工作流程图。服务器打开端口,接收客户端发出的连接请求,接收连接请求后与客户端建立连接,读取客户端的业务请求,对业务请求做出处理并发出响应,完成后关闭端口。其中,接收连接、读取请求、发出响应时,均可能会发生输入/输出阻塞。如,没有收到连接请求、没有收到客户端的业务请求、没有收到客户端的接收响应请求导致线程在处理客户端的请求时发生阻塞,同时,没有收到连接请求还会导致后续的读取客户端的业务请求、对业务请求做出处理并发出响应的阻塞。在本申请提供的又一实施例中,服务器设有调度模块20,用于协调各个线程。调度模块20记载有各线程加载文件、处理文件、释放文件的事件及记录。当有线程处于就绪或阻塞状态时,将该线程加载其他文件并进行处理,从而提高了线程的利用率。进一步的,在该实施例中,将文件按照文件自身的结构和/或预设字符长度进行拆分,可以利用不同的线程处理同一文件下的子文件,不仅从整体上提高了所有文件处理的效率,而且提高了单一文件处理的效率。以上是本申请实施例提供的数据处理的方法,基于同样的思路,请参照图5,本申请还提供一种数据处理的系统1,包括:拆分模块10,用于按照拆分规则,拆分待处理文件形成若干子文件;调度模块20,用于:启动预设数量的线程,根据线程加载规则,调度第一线程加载并处理第一子文件;判断第一线程的当前状态是否为就绪或阻塞状态;如果第一线程的当前状态是就绪或阻塞状态,调度第一线程释放第一子文件,调度第一线程加载并处理第二子文件。在本申请提供的又一实施例中,拆分模块10,用于按照拆分规则,拆分待处理文件形成若干子文件,具体用于:将待处理文件根据文件自身的结构拆分为若干子文件。在本申请提供的又一实施例中,拆分模块10,用于按照拆分规则,拆分待处理文件形成若干子文件,具体用于:将待处理文件依照预设长度拆分为若干子文件。在本申请提供的又一实施例中,拆分模块10,用于将待处理文件依照预设长度拆分为若干子文件,具体还用于:将待处理文件依照预设长度拆分为若干中间文件;校验中间文件的首末位,当首位不是适格的首位时,向前延伸一定数量的字符,从中找到适格的首位;当末位不是适格的末位时,向后延伸一定数量的字符,从中找到适格的末位;设定中间文件适格的首末位为子文件的首末位形成子文件。在本申请提供的又一实施例中,拆分模块10,用于按照拆分规则,拆分待处理文件形成若干子文件,具体用于:拆分待处理文件形成若干子文件,每一个子文件有记录其起点位置和终点位置的字段。在本申请提供的又一实施例中,加载模块20,用于使线程加载子文件,具体用于:使线程使用RandomAccessFile的seek函数直接定位到子文件的起点位置加载子文件。本申请还提供一种数据处理的系统1,包括:加载模块20,用于启动预设数量的线程,根据线程加载规则,使线程加载子文件;处理模块30,用于当子文件处于可处理状态时,线程处理该子文件,否则,线程释放该子文件。本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数值处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数值处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。这些计算机程序指令也可存储在能引导计算机或其他可编程数值处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。这些计算机程序指令也可装载到计算机或其他可编程数值处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flashRAM)。内存是计算机可读介质的示例。计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任 何方法或技术来实现信息存储。信息可以是计算机可读指令、数值结构、程序的模块或其他数值。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitorymedia),如调制的数值信号和载波。还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1