微波EDA网,见证研发工程师的成长!
首页 > 测试测量 > 测试测量技术文库 > LabWindows?/CVI中的多线程技术

LabWindows?/CVI中的多线程技术

时间:12-23 来源:互联网 点击:

1. 进行多线程编程的原因

在程序中使用多线程技术的原因主要有四个。最常见的原因是多个任务进行分割,这些任务中的一个或多个是对时间要求严格的而且易被其他任务的运行所干涉。例如,进行数据采集并显示用户界面的程序就很适合使用多线程技术实现。在这种类型的程序中,数据采集是时间要求严格的任务,它很可能被用户界面的任务打断。在LabWindows/CVI程序中使用单线程方法时,程序员可能需要从数据采集缓冲区读出数据并将它们显示到用户界面的曲线上,然后处理事件对用户界面进行更新。当用户在界面上进行操作(如在图表上拖动光标)时,线程将继续处理用户界面事件而不能返回到数据采集任务,这将导致数据采集缓冲区的溢出。而在LabWindows/CVI程序中使用多线程技术时,程序员可以将数据采集操作放在一个线程中,而将用户界面处理放在另一个线程中。这样,在用户对界面进行操作时,操作系统将进行线程切换,为数据采集线程提供完成任务所需的时间。

在程序中使用多线程技术的第二个原因是程序中可能需要同时进行低速的输入/输出操作。例如,使用仪器来测试电路板的程序将从多线程技术中获得显著的性能提升。在LabWindows/CVI程序中使用单线程技术时,程序员需要从串口发送数据,初始化电路板。,程序需要等待电路板完成操作之后,再去初始化测试仪器。必须要等待测试仪器完成初始化之后,再进行测量,。在LabWindows/CVI程序中使用多线程技术时,你可以使用另一个线程来初始化测试仪器。这样,在等待电路板初始化的同时等待仪器初始化。低速的输入/输出操作同时进行,减少了等待所需要的时间总开销。

在程序中使用多线程技术的第三个原因是借助多处理器计算机来提高性能。计算机上的每个处理器可以都执行一个线程。这样,在单处理器计算机上,操作系统只是使多个线程看起来是同时执行的,而在多处理器计算机上,操作系统才是真正意义上同时执行多个线程的。例如,进行数据采集、将数据写入磁盘、分析数据并且在用户界面上显示分析数据,这样的程序很可能通过多线程技术和多处理器计算机运行得到性能提升。将数据写到磁盘上和分析用于显示的数据是可以同时执行的任务。

在程序中使用多线程技术的第四个原因是在多个环境中同时执行特定的任务。例如,程序员可以在应用程序中利用多线程技术在测试舱进行并行化测试。使用单线程技术,应用程序需要动态分配空间来保存每个舱中的测试结果。应用程序需要手动维护每个记录及其对应的测试舱的关系。而使用多线程技术,应用程序可以创建独立的线程来处理每个测试舱。然后,应用程序可以使用线程局部变量为每个线程创建测试结果记录。测试舱与结果记录间的关系是自动维护的,使应用程序代码得以简化。

2. 选择合适的操作系统

微软公司的Windows 9x系列操作系统不支持多处理器计算机。所以,你必须在多处理器计算机上运行Windows Vista/XP/2000/NT 4.0系统来享受多处理器带来的好处。而且,即使在单处理器计算机上,多线程程序在Windows Vista/XP/2000/NT 4.0上的性能也比在Windows 9x上好。这要归功于Windows Vista/XP/2000/NT 4.0系统有着更为高效的线程切换技术。但是,这种性能上的差别在多数多线程程序中体现得并不是十分明显。

对于程序开发,特别是编写和调试多线程程序而言,Windows Vista/XP/2000/NT 4.0系列操作系统比Windows 9x系列更为稳定,当运行操作系统代码的线程被暂停或终止的时候,操作系统的一些部分有可能出于不良状态中。这种情况使得Windows 9x操作系统崩溃的几率远远高于Windows Vista/XP/2000/NT 4.0系统的几率。所以,NI公司推荐用户使用运行Windows Vista/XP/2000/NT 4.0操作系统的计算机来开发多线程程序。

3. LabWindows/CVI中的多线程技术简介

NI LabWindows/CVI软件自二十世纪九十年代中期诞生之日起就支持多线程应用程序的创建。现在,随着多核CPU的广泛普及,用户可以使用LabWindows/CVI来充分利用多线程技术的优势。

与Windows SDK threading API(Windows 软件开发工具包线程API)相比,LabWindows/CVI的多线程库提供了以下多个性能优化:

  • Thread pools帮助用户将函数调度到独立的线程中执行。Thread pools处理线程缓存来最小化与创建和销毁线程相关的开销。
  • Thread-safe queues对线程间的数据传递进行了抽象。一个线程可以在另一个线程向队列写入数据的同时,从队列中读取数据。
  • Thread-safe variables高效地将临界代码段和任意的数据类型结合在一起。用户可以调用简单的函数来获取临界代码段,

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top