VC多线程流水线在数据存储系统中的设计与实现*

2016-09-16 09:10胡晓峰张亮红刘文怡王红亮中北大学电子测试技术国家重点实验室太原030051中北大学仪器科学与动态测试教育部重点实验室太原030051
电子器件 2016年4期
关键词:中北大学存储系统流水线

胡晓峰,张亮红,刘文怡*,王红亮(1.中北大学电子测试技术国家重点实验室,太原030051;2.中北大学仪器科学与动态测试教育部重点实验室,太原030051)

VC多线程流水线在数据存储系统中的设计与实现*

胡晓峰1,2,张亮红1,2,刘文怡1,2*,王红亮1,2
(1.中北大学电子测试技术国家重点实验室,太原030051;2.中北大学仪器科学与动态测试教育部重点实验室,太原030051)

在航天测试领域,为分析测试系统的状态和变化情况,经常需要采集、处理并存储状态数据。针对状态数据量大、分析处理复杂、存储速度慢等问题,基于VisualC++编程,采用多线程、流水线、分块存取的方式,设计数据存储系统软件,实现快速循环读取数据、实时处理显示数据,并保存数据至文件,该实现方法避免了数据的丢失、程序的阻塞,并对数据进行实时、直观地分析处理。经测试,系统读取数据、处理数据以及存储数据的整体速度达400Mbyte/s以上。

大数据;多线程;流水线;实时处理

在各类工业控制、工程测试领域中经常需要采集、传输、存储、处理大量数据[1]。例如,在航天测试领域的各类振动、电压、冲击、缓变、温度、速变、高速图像、液位等数据,其具有采样率高、采集时间长、数据量大等特点。为分析各种状态数据,需要对采集数据进行实时处理并显示,为达到多次使用数据的目的,需将数据进行存储,。

软件系统处理任务较多,运算量大且具实时性[2],故采用多线程实现并发执行。目前,软件系统针对数据读取、处理、存储处理方案主要有两种,第1种,采用单线程,在单个线程里顺序执行数据操作,该方法操作简单,但操作时间长,只适合采集速度慢、处理简单的数据存储系统[3]。第2种,采用多线程,将数据操作分别在读线程、处理线程、存储线程中完成,并采用临界区的方法解决各线程间的同步问题,此方案在处理速度上较第1种方案快,但处理复杂,容易出现程序阻塞等问题[4-5]。结合以上两种方案,本系统采用多线程、流水线方法实现单个线程内数据操作顺序执行,多个线程之间以流水线形式并行执行。

1 数据存储系统简介

本系统是基于VC++实现的数据存储系统,其系统组成框图如图1所示,系统通过PCI_E接口接收采集系统采集的数据,单次数据传输量为8M单位。以用户界面线程作为主线程,响应用户操作,显示数据图形,并通过3个工作者线程完成对数据的读取、处理、存储,为避免数据混乱,将不同线程接收的数据存储在不同的文件中。

图1 系统组成框图

2 系统软件设计

2.1多线程简介

MFC应用程序中的线程有两种类型:用户界面线程(User-interface thread)和工作者线程(Worker thread)。用户界面线程负责处理用户输入、响应用户及系统所产生的事件和消息等。工作者线程通常用来执行后台计算和维护任务[6]。本系统根据两种线程的不同特点,将不同的任务分配给不同线程完成,实现数据的读取、处理、存储以及显示。

在多线程应用程序中,为是各线程协调一致的工作需采用线程同步。MFC提供了4种同步方法:临界区(Critical Section)、信号灯(Semapore)、互斥量(Mutex)和事件(Event)[7]。本系统采用人工事件对象实现多线程间的通信。

2.2多线程流水线的应用

由于数据采集时间长,数据总量远远大于内存的总量,同时为实现数据处理的实时性,采取每次读取8M单位大小的数据。又因数据操作主要包括读取、处理、存储三大操作阶段,为充分利用CPU和I/ O资源,系统采用23个线程按流水线方式运行。

本文采用Tr表示数据读取耗时,Td表示数据处理耗时,Tw表示数据存储时间,n表示数据块的个数。若采用单线程总耗时T=n(Tr+Td+Tw)。最理想状态为Tr≈Td≈Tw,多线程流水线示意图如图2所示,总耗时T=(n+2)Tr。

图2 多线程流水线示意图

通常情况下,Tr、Td、和Tw并不相等。例如在本系统中,由于数据的读取通过PCI_E接口耗时较短,数据处理需进行频谱分析所以耗时较长,三者耗时排序为Tr<Tw<Td。为防止线程之间争夺资源,发生冲突,所以多线程流水线必须满足以以下规则:

①第2个线程的第K次读数据必须在第1个线程的第K个读数据结束之后开始;

②第3个线程的第K次读数据必须在第2个线程的第K个读数据结束之后开始;

③第1个线程的第K次读数据必须在第3个线程的第K-1个读数据结束之后开始。为此,采用事件对象实现线程间的同步。事件允许在一个线程工作时,唤醒和启动另一个线程。每个事件对象都有两种状态:有信号和无信号状态[8]。通过调用SetEvent()函数设置事件对象为有信号状态,调用ResetEvent()函数设置事件对象为无信号状态,并调用WaitForSingleObject()函数和WaitForMultiObjects()函数检测事件的状态。线程启动流程序如图3所示。当启动程序是主线程启动,应用程序界面运行,当用户点击启动数据存储操作时,主线程创建并启动线程1、线程2、线程3,但除线程1处理唤醒状态外,其他2个线程处于未唤醒状态。

图3 线程启动流程

图4所示为线程1内具体流程。其中event3_1为线程 1监测事件,由线程 3唤醒;event1_2为线程 2监测事件,由线程 1唤醒;event2_3为线程3监测事件,由线程2唤醒。

图4 线程1工作流程图

如图4启动线程1后,先判断是否首次执行线程函数体,若不是,则调用WaitForSingleObject()函数等待event3_1为激活态,当event3_1激活时则读取PCI_E数据,否则继续等待;当首次执行线程函数体时,则读取 PCI_E数据。读取完PCI_E数据后,设置event3_1为非激活状态,并激活event1_2,然后进行数据处理,将数据处理后的数据由主线程以图形形式显示出来,最后将数据保存至文件。当函数体执行完成后判断线程是否结束,若结束则终止线程,反之循环执行。线程2和线程3的执行流程除没有判断是否首次执行函数体外,基本与线程1一致。

2.3对比分析

经过充分测试,多线程流水线处理数据的读取、处理、存储的速度有明显提高,采用该方法能进一步提高程序执行效率。表1列出了单线程、原始多线程(创建读数据线程、处理数据线程、存储数据线程)、多线程流水线对不同数据总量所需的时间与数据总量的关系具体数据会因计算机、数据处理过程等的不同而不同。从表中可以看出,采用多线程流水线操作数据的速度最快,相对于单线程的操纵速度,该方法将操作时间缩短了30%左右,且随着数据总量的增加,缩短时间百分比有所提高。由此可见,多线程流水线对大容量数据操作具有重要意义。

表1 3种方法处理时间与记录数据的关系比较

3 数据存储软件设计

本系统使用Microsoft Visual Studio 2012设计了“数据存储软件”,其界面效果如图5所示。

图5 数据存储软件界面

图5中最上一栏为对设备的打开、关闭以及初始化操作、记录触发信息配置、启动停止记录操作、选择文件存储位置等。其中选择的文件路径为线程1文件路径,线程2和线程3的文件路径根据所选路径自动生成。中间一栏为数据显示栏,将数据经过处理后以图形的形式显示。最底层为状态信息显示栏,将程序运行中的速度信息、错误信息等进行显示。

4 结论

数据的实时采集、处理、存储,并实时动态的显示是数据存储系统的基本环节。本文的主要工作在于:基于MFC图像编程与VC多线程编程,利用Microsoft Visual Stdio 2012设计了一种数据存储软件,并着力提高数据操作效率,为解决此问题,本文采用多线程流水线的处理方法,并采用人工事件对象解决各线程间的同步问题,充分利用CPU的空闲时间,提高数据记录速率。该方法较单线程和传统多线程方法都有所提高,时间较单线程缩短30%左右,并随着记录数据的增加缩短时间百分比有所提高。

[1] 马志刚,刘文仪.航天测试系统大容量数据曲线绘制方法的研究[J].图学学报,2014,35(4):623-629.

[2] 马涛,汶德胜,陈学飞,等.基于USB 2.0摄像头的目标跟踪平台实现[J].电子器件,2008,31(3):926-930.

[3] 张瑜.数据采集系统的软件设计[D].西安:西安电子科技大学,2014.

[4] 王世强,曹英,王宏.基于多线程的肌电信号实时采集与分析系统[J].仪器仪表学报,2006,27(6):1300-1301.

[5] 郭峰,龙兵.多线程同步技术在逻辑分析仪软件开发中的应用[J].电子测量技术,2011,34(11):48-54.

[6] 赵晓平,张令弥,罗光坤.VC多线程编程在动态测试系统中的实现[C]//2007年第九届全国振动理论及应用学术会议论文集,杭州,2007:121-127.

[7] 孟昭荣,江立辉,胡兴伟,等.基于VC多线程的实时数据采集系统[J].舰船防化,2008(2):44-47.

[8] 龙华.基于多线程图像处理机测试系统的研究[D].华中科技大学,2011.

胡晓峰(1990-),男,汉族,山西临汾人,中北大学硕士生,研究领域为测试计量技术及仪器,huxiaofeng88@163.com;

张亮红(1990-),女,汉族,湖南益阳人,中北大学硕士生,研究领域为测试计量技术及仪器,1056459843@qq.com;

刘文怡(1970-),男,汉族,山西岚县人,中北大学,教授,研究领域为测试计量技术及仪器,liuwenyi@nuc.edu.cn;

王红亮(1978-),男,汉族,河南林州人,中北大学,副教授,研究领域为测试计量技术及仪器,wanghongliang@nuc.edu.cn。

Design and Implementation of Data Storage System Based on VC Multithreading and Pipelining*

HU Xiaofeng1,2,ZHANG Lianghong1,2,LIU Wenyi1,2*,WANG Hongliang1,2
(1.Science and Technology on Electronic Test&Measurement Laboratory,Noah Uniυersity ofChina,Taiyuan 030051,China;2.Ministry of Education Key laboratory of Instrumentation Science&Dynamic Measurement,Noah Uniυersity of China,Taiyuan 030051,China)

In the field ofaerospace test,for analyzing the status and change situation of testsystem,we often need to collect,process and store data.Aiming at large data,complex analysis and processing,slow storage,based on visual c++programming,multithreading,pipelining,block access were used to design the storage system software.This system can read data circularly and quickly,can real-time processand display the data,and it can save the data to a file.Thismethod avoids losing data and blocking program successfully.After testing,the reading speed and processing,storing data of the system aremore than 400Mbyte/s.

large data;multithreading;pipelining;real-time processing

TP311.521

A

1005-9490(2016)04-0964-04

项目来源:国家自然科学基金重点项目(51275491)

2015-05-20修改日期:2015-06-28

EEACC:762010.3969/j.issn.1005-9490.2016.04.040

猜你喜欢
中北大学存储系统流水线
柠檬酸辅助可控制备花状银粒子及其表面增强拉曼散射性能
中北大学信创产业学院入选首批现代产业学院
分布式存储系统在企业档案管理中的应用
流水线
《中北大学学报(自然科学版)》征稿简则
有机相化学镀铝法制备Al/石墨烯复合材料粉末
天河超算存储系统在美创佳绩
报废汽车拆解半自动流水线研究
华为震撼发布新一代OceanStor 18000 V3系列高端存储系统
流水线生产杀死艺术