黄 志, 高钰杰, 廖伟平
(广西区气象信息中心,广西南宁530219)
根据广西区局下发《关于调整自动气象站观测传输业务的通知》(桂气测函[2011]31号)文件精神,自2011年5月23日09时(北京时)全区所有自动气象站传输业务调整为30分钟上传一次观测数据。
调整后自动站数据(大监自动站和区域自动站)传输频率为每半小时传输一次,每次共1400多个数据文件(目前共4种),以往的单线程处理程序对1400多个文件采用串行处理,在国家局传输考核时效(整点8分钟内)还是可以完成。
随着单站数据的不断增多和应用需求的提高,9类自动站数据传输将在不久的将来成为现实,届时每次上传的单站数据将为5000多个,如果遇到天气过程则需要每10分钟甚至每5分钟进行数据加密传输,以往的单线程的处理方式将很难在时效内快速高效处理所有的单站文件,为此,拟在对文件类别分类的同时采用多线程多路实时并发处理机制,让其每个独立线程对相应类别的自动站单站文件进行数据文件合并打包、上传以及信息入库,从而实现每类数据都是随来随处理,极大提高处理时效。图1为单线程自动站系统处理框图。
Delphi是Borland公司推出的一个集成开发环境(IDE),使用的核心是由传统Pascal语言发展而来的Object Pascal,以图形用户界面为开发环境,透过IDE、VCL工具与编译器,配合连结数据库的功能,构成一个以面向对象程序设计为中心的应用程序开发工具。可在 Windows3.x、Windows95、WindowsNT、WindowsXP、Windows Vista、Windows7等环境下使用 。当前 ,DELPHI也可以在LINUX平台上开发应用,其在LINUX上的对应产品Kylix。
Delphi被称为第四代编程语言,具有简单、高效、功能强大的特点,提供各种开发工具,包括集成环境、图像编辑(Image Editor),以及各种开发数据库的应用程序,如DesktopDataBase Expert等。除此之外,还允许用户挂接其他的应用程序开发工具,如Borland公司的资源编辑器(Resourse Workshop)。在Delphi众多的优势当中,在数据库方面的特长显得尤为突出:适应于多种数据库结构,从客户机/服务机模式到多层数据结构模式;高效率的数据库管理系统和新一代更先进的数据库引擎;最新的数据分析手段和提供大量的企业组件。
图1 单线程自动站系统处理框图
每个正在系统上运行的程序都是一个进程,进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。线程是进程的一个实体,是CPU调度和分派的基本单位,是比进程更小的能独立运行的基本单位。线程不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行。
单线程就是一个进程中只能有一个线程,剩下的进程必须等待当前的线程执行完。这种模型的缺点在于系统完成一个很小的任务都必须占用很长的时间。多线程就是进程有多个线程,是为了同步完成多项任务,不是为了提高运行效率,而是为了提高资源使用效率来提高系统的效率。
图2为多线程自动站系统处理框图。对比图1可以发现,此系统对文件进行了分类,并采用了单独的FTP发送线程,每个线程各负其责,互不干扰,即使某一线程运行出现故障,其他线程也能正常运行。
图2 多线程自动站系统处理框图
系统分为4个功能模块,每个模块由一个线程负责,同时并发处理,分别介绍4个功能模块的具体职能。系统处理逻辑流程图如图3所示。
功能模块1:大监站处理子线程
此线程主要负责大监自动站数据文件的数据格式检查,并对格检后的单站文件进行数据打包合并生成合并文件,然后发送至以FTP方式发往国家局的发送目录;之后转移单站文件至相应的单站存储目录文件夹;最后将所有处理之后的单站数据文件写入相应的大监站日志文件,以备日后查阅核对。
功能模块2:区域站处理子线程
此线程与功能模块1相似,通过区分文件名处理区域自动站单站文件。
功能模块3:单雨量站处理子线程
此线程主要负责在已处理过的区域自动站数据中搜索其中的单雨量站,然后制作生成单雨量站文件,并转移至至以FTP方式发往国家局的发送目录;此外线程还负责单站源目录的单站数量监控,方便值班人员监控程序的运行状况。(如果单站源目录的文件数量不减少,证明程序卡死了,需要重启,单线程就很难实现这样的功能)
功能模块4:FTP发送文件线程
此线程主要负责将发送目录的合并文件通过FTP的方式发往国家局指定目录,并将合并文件数据信息入库备查,此外还有一些对入库操作失败的异常处理,以保证线程的正常运行。
此外,系统可以根据实际的处理情况,增加和减少线程数量,随着文件类型和文件数量的不断增多,可以以模块的形式增加线程,并且代码的修改量也较小,适应性很强,方便系统的整合。
图3 多线程自动站处理逻辑流程图
图4 系统运行截面图
目前系统已经处于业务运行状态,运行情况良好并有很好的交互性,较之前的单线程处理模式处理速度明显提升,不会出现单线程处理模式在程序运行过程中因为程序独占资源而造成界面空白锁死,不能拖动和操作。表1为单线程与多线程系统运行参数对比,图4是系统运行界面图。
表1 单线程与多线程系统运行参数对比
系统目前运行稳定,系统因为异常退出的机率较以前大为减小。由于采用了多线程技术,使系统处理数据的速度较原来的单线程大幅提高,这为以后快速处理大数据量分钟加密数据提供了保证。系统的线程之间相互独立,代码模块可以重复利用,具有较好的拓展性,为类似系统整合提供了技术支持;可利用多线程将目前运行的多个独立子系统整合为集约化数据综合处理系统。在以后的工作当中可以将自动站的单站数据信息入库功能添加至线程1和2中,以完善系统功能;同时尽可能改善程序结构和容错机制,提高系统运行的稳定性,减少异常处理故障的发生。
[1] 代峰燕,刘兴华,刘松,等.多线程技术在测控系统中的实现[J].北京石油化工学院学报,2011,(1).
[2] (日)结城浩.博硕文化译.Java多线程设计模式[M].北京:中国铁道出版社,2005.
[3] 电脑编程技巧与维护杂志社.DELPHI编程典型实例解析[M].北京:中国水利水电出版社,2007.
[4] 梁水,赛奎春.Delphi开发典型模块大全[M].北京:人民邮电出版社,2009.
[5] 王惠平.基于多线程温度控制专家系统[M].现代电子技术,2012,35(2).
[6] 黄文钰.Delphi 8程序设计经典解析[M].北京:清华大学出版社,2006.
[7] 薛建军,周杰,杜景林,等.基于多线程的实时与非确定时气象资料处理[J].信息技术,2011,(11).
[8] 侯雪莲,张承明,高靖妹.多线程下载系统中的关键技术探析[J].北京电力高等专科学校学报,2011,(7).
[9] 梁水,张立科.Delphi开发技术大全[M].北京:人民邮电出版社,2007.
[10] 宁正元.Delphi开发技术大全[M].北京:水利水电出版社,2005.