• 易迪拓培训,专注于微波、射频、天线设计工程师的培养
首页 > 测试测量 > Labview 虚拟仪器 > 基于LabVIEW的多线程编程技术比较研究

基于LabVIEW的多线程编程技术比较研究

录入:edatop.com    点击:

  摘 要: 为了充分利用系统资源,提高数据采集系统的运行效率,对LabVIEW编程框架下的数据采集系统进行了模块化分解。分别使用单线程技术,队列与集合相结合、仅使用队列两种多线程技术实现了系统主要功能,并对结果进行了比较和分析。结果表明,与单线程相比,多线程编程技术能有效地缩短数据采集与分析时间,且仅使用队列的多线程方案具有更高的执行效率。
  关键词: LabVIEW;多线程;队列;集合

  LabVIEW是NI公司推出的一种基于图形化编程语言的虚拟仪器开发平台,以其诸多的优点得到了广泛的认可,是进行虚拟仪器开发的强大软件工具。LabVIEW在编程中引入了数据流的概念,程序严格按照数据流的方向顺序执行[1-2]。一个基本的数据采集系统框图如图1所示,主要包括数据采集、采集显示(显示1)、处理分析、分析显示(显示2)、结果存储五个部分。如果采用单线程编程,则数据依次进入各个模块,后面的模块必须等前面的模块执行完后才能开始执行。当用时较长的I/O操作模块(如数据高速连续采集)在运行时,其他模块等待时间较长,影响整个采集系统的实时性[3]。多线程技术是解决该问题的有效方法之一。本文根据LabVIEW的编程特点,对数据流进行分解,利用同步机制中的队列与集合相结合及仅使用队列两种多线程编程技术对LabVIEW编程环境下的多线程编程技术进行了研究,并从执行效率上进行比较和结果分析。

1 多线程技术及其LabVIEW编程
  进程是应用程序的运行实例,而线程是进程内部的可独立执行的单元,是操作系统对系统资源的基本调度单位。同属于一个进程的所有线程都共享进程的虚拟地址空间,线程之间可以共享进程的全部数据和资源。
  多线程是指操作系统支持一个进程中执行多个线程的能力。采用多线程编程技术,整个软件程序含有完成不同功能的多个线程,如数据采集、实时数据和曲线显示、数据处理与分析线程和用户界面线程等。这样,多个线程同时执行,在一段时间内并行完成多个任务,既加快了系统的反应速度,又提高了执行效率[4-5]。在现代测控技术中,多线程编程技术常常是必须采用的技术。
1.1 多线程在LabVIEW中的实现
  LabVIEW图形化编程语言与其他成熟的计算机编程语言相比有较大的差别,主要特点是它引入了数据流的概念,程序执行过程中数据的流向、程序执行的顺序和方向都是可预见的[6]。然而,这种顺序化执行方式对多线程编程是不利的。因为各个线程并行运行,同时还要共享进程数据,从左至右的数据流方式似乎是不太可能实现多个线程的并行运行的。为了解决这个问题,LabVIEW采用将没有直接数据连接的程序块单独创建一个线程,将各个模块放在循环结构中并行执行而实现多线程,它是LabVIEW中创建多线程的一般方法。但是,创建了多个线程并不能保证它们能正确有序地运行,而是需要在线程间传递和共享数据,以及线程之间进行同步与通信。
1.2 多线程间的通信
  LabVIEW中提供了局部变量与全局变量,可以用局部变量在两个甚至多个线程间传递和共享数据。如对数据采集模块的输出设置一个写局部变量,处理分析模块设置一个读局部变量,两个模块间没有直接的数据连接,通过局部变量传递数据,数据采集和处理分析两个线程并行运行。然而,这种数据传递方式是不安全的,若处理分析模块运行所需的时间比数据采集模块要短,可能导致处理分析模块对局部变量多次重复读取,从而引起错误的的数据分析结果,这显然不是我们所期望的。
  在LabVIEW多线程程序设计的系统中,线程之间数据传递和共享、线程间的同步是实现多线程编程的关键。LabVIEW在Synchronization中提供通知(Notifier)、队列(Queue)、旗语(Semaphore)、集合(Rendezvous)、事件(Occurrences)等函数,以解决多线程间的数据传递和同步问题。
2 LabVIEW中线程编程技术比较
  将数据采集系统分解成如图1的数据采集、采集显示(显示1)、处理分析、分析显示(显示2)、结果存储这五个模块,假设数据采集所需时间为60ms,处理分析为70ms,采集显示和分析显示均为30ms,结果存储为100ms,数据采集和结果存储VI的优先级设置为高于正常,显示VI设置成可重入,其他所有用户子VI的执行系统和优先级都按默认设置。连续运行30次,每次采集正弦函数产生的150个点的数据,分别用单线程、多线程方案来统计程序运行的时间,然后对测试结果进行分析和比较,以此来验证多线程编程技术的效果。
2.1 单线程实现
  单线程的实现就是程序按数据采集、采集显示、处理分析、分析显示、结果存储的顺序执行,数据流从左至右依次流进这几个模块,程序框图如图2所示。

2.2 队列与集合实现
  可以肯定,采用单线程这种顺序化的执行方式效率较低,因为各个模块都要等待数据,不能并行执行。对系统进行分解,可以明显看出,除了分成五个模块外,已采集数据的采集显示、处理分析可以并行执行。同样,处理分析后的数据也可以同时进行分析显示、结果存储。这样,系统就简化成了三个部分和两条主要的数据流,分别为数据采集到采集显示、处理分析的数据流,处理分析后的数据到分析显示、结果存储的数据流。而且,这三部分之间传递的数据还是有序的,因此可以采用两个队列(Queue)来传递数据。而已采集数据的采集显示、处理分析,处理分析后的分析显示、结果存储的并行执行使用集合(Rendezvous)来实现,具体的程序框图如图3所示。

  在数据采集模块、处理分析模块完成后让输出的数据分别进入各自的队列(Enqueue Element),同时创建集合(Rendezvous),已采集数据的采集显示、处理分析,处理分析后的数据的分析显示、结果存储分别从两个队列中取出各自的数据,只有当等待集合(Wait at Rendezvous)收到集合信号后同时执行。
2.3 队列实现
  若全部采用队列来实现五个模块的并行运行和模块间的数据传递、共享及模块间的同步,这时会有四个数据队列,分别为数据采集到采集显示的队列、采集显示到处理分析的队列、处理分析到分析显示的队列、分析显示到结果存储的队列。除了结果存储模块外,各个模块的输出均进入下一个队列,而除了数据采集模块外,各个模块的输入均来自上一个队列(Dequeue Element),程序框图如图4所示。

3 试验结果与分析
  在Intel Pentium D CPU 3GHz,1GB内存(DDR2 533),Windows XP SP2,LabVIEW7.1环境下运行,单线程的运行时间是8 792ms,同时使用队列和集合实现的多线程方案的运行时间是6 940ms,仅使用队列实现的多线程方案的运行时间为4 978ms。同时使用队列和集合的方案运行时间占单线程方案的78.9%,仅使用队列的多线程方案运行时间占单线程方案的56.6%。毫无疑问,使用多线程编程技术的确能有效地减少程序的执行时间。但是,两种方案实现的多线程效果有比较明显的差异,同时使用队列和集合的方案仅节约了20%左右的时间,而仅使用队列的多线程方案节约了近50%的时间。
  分析和比较发现:队列加集合的方案虽然更符合人们编程的思维,但并没有达到理想的效果,原因在于采集显示模块所需时间和处理分析模块相差较大,两者并行运行的时间基本上取决于处理分析模块所用的时间,只有在处理分析模块运行完成后才发出集合信号,分析显示模块与结果存储模块才开始运行。同理,分析显示模块和结果存储模块相比也是如此,两者并行运行的时间基本上取决于结果存储模块所用的时间。因此,处理分析与结果存储这两个最占用时间的模块之间仍是串行运行的。相比而言,仅采用队列实现的多线程方案,四个队列的首尾是相连的,当一个数据进入队列后,马上就可以通过队列传递给其他的模块,因此五个模块都是并行运行的,大大节约了整个系统执行时间。由此可见,单线程的执行时间基本上等于各个模块的时间总和,仅采用队列实现的多线程方案的执行时间基本上由执行时间最长的那个模块决定。
  对于一个数据采集系统,根据其任务功能恰当地分解成几个独立的模块,利用多线程编程技术,恰当地使用LabVIEW同步机制中提供的函数,尤其是队列,可以有效地缩短系统整体的执行时间,提高数据采集系统的时效性。在LabVIEW虚拟仪器平台下,多线程编程技术比单线程更能有效地缩短数据采集、分析和存储的时间,而且,仅使用队列的多线程编程方式具有更高的执行效率。

参考文献
[1] 杨乐平,李海涛,赵勇,等.LabVIEW高级程序设计[M].北京:清华大学出版社,2003.
[2] 高亚奎,支超有.多线程虚拟仪器测试软件的开发[J].计算机测量与控制,2003,11(12):986-987.
[3] 李成,丁天怀,傅志斌,等.可多线程测量的模拟钻杆四分量力虚拟仪器[J].清华大学学报(自然科学版),2006,46(8):1414-1417.
[4] 林康红.基于LabVIEW的远程虚拟仪器多线程技术[J].自动化仪表,2003,24(8):25-27.
[5] 张靓,黄海于,张翠芳.基于Lab Windows/CVI多线程数据采集的研究与设计[J].中国仪器仪表,2005(8):72-76.
[6] 苏维嘉,李大琳.虚拟仪器设计中多线程技术的应用[J].工业控制计算机,2007(9):92-93.

点击浏览:矢量网络分析仪、频谱仪、示波器,使用操作培训教程

上一篇:基于LabVIEW的数据采集在NASA航空器内进行
下一篇:基于NI LabVIEW FPGA平台的用户案例集

微波射频测量操作培训课程详情>>
射频和天线工程师培训课程详情>>

  网站地图