黃 志, 高鈺杰, 廖偉平
(廣西區氣象信息中心,廣西南寧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.