LabVIEW建立生产者消费者

简介: LabVIEW建立生产者消费者

LabVIEW建立生产者消费者


生产者/消费者设计模式由并行循环组成,这些循环分为两类:生产者循环和消费者循环。生产者循环和消费者循环间的通信可以使用队列或通道连线来实现。


队列


LabVIEW内置的队列操作VI可在函数选板>>数据通信>>队列操作( Functions>> Data Communication >> Queue Operations)中找到。


队列基于先进/先出理论。在生产者/消费者设计模式中,队列可以在生产者循环和消费者循环之外初始化。生产者循环为消费者循环生成数据,所以会向队列添加数据(将数据添加到队列中称为“入列”)。


消费者循环将从该队列中删除数据(从队列中删除数据称为“出列”)。因为队列基于先进先出原则,所以消费者总是按照生产者向队列添加数据的顺序对数据进行分析。图1显示如何在LabVIEW中创建生产者/消费者设计模式。



图1:生产者/消费者设计模式


LabVIEW中提供有关于使用队列的范例,可作为应用程序开发的起点。如果要搜索这些范例,可在LabVIEW范例查找器中搜索“队列”(Queue)。


通道


LabVIEW2016新增了通道连线功能。通道连线可以实现与队列相同的功能。


在队列中,您可以设置队列引用(获取队列)、添加数据(入列)和删除数据(出列),然后关闭队列引用(发布队列);使用通道(Channels)功能,该过程将简化为仅设置数据的Writer和Reader。


有关通道连线和入门模板的更多信息,请参见《LabVIEW帮助文档:使用通道连线在代码的并行部分之间通信数据》


在处理生产者/消费者设计模式时,需要注意一些注意事项,例如,队列的使用和同步。


队列使用


问题: 队列被绑定到特定的数据类型。因此,生产者循环中产生的每个不同数据条目都需要放置到不同的队列中。这可能带来一个问题,那就是增加了程序框图的复杂性。


解决方案: 队列可以接受数组和簇等数据类型。每个数据条目都可以放到一个簇中。这样就会掩盖簇数据类型背后的各种数据类型。


同步


问题: 由于生产者/消费者设计模式并非基于同步,循环初次执行时并不遵循特定的顺序。 因此,在一个循环之前启动另一个循环可能会导致问题。


解决方案: 可以通过将事件结构添加到生产者/消费者设计模式解决这类同步问题。 图2显示了实现这一功能的模板。



图2:在生产者/消费者设计模式中使用事件结构


这是LabVIEW的一个功能介绍,更多的使用方法与开发案例,欢迎登录官网,了解更多信息。有需要LabVIEW项目合作开发,请与我们联系。

相关文章
|
8天前
|
数据采集 设计模式 缓存
LabVIEW生产者消费者架构
LabVIEW生产者消费者架构
19 2
|
8天前
|
数据采集
多线程在编程中的重要性有什么?并以LabVIEW为例进行说明
多线程在编程中的重要性有什么?并以LabVIEW为例进行说明
14 4
|
8天前
|
SQL 供应链 安全
Linux多线程【生产者消费者模型】
Linux多线程【生产者消费者模型】
63 0
|
9月前
|
存储 算法 调度
《计算机操作系统-第五章》之线程与多线程模型
《计算机操作系统-第五章》之线程与多线程模型
124 0
|
消息中间件 存储 缓存
RabbitMQ:第一章:6 种工作模式以及消息确认机制(理论与代码相结合)
RabbitMQ:第一章:6 种工作模式以及消息确认机制(理论与代码相结合)
|
算法 Linux
linux多线程同步设计
linux多线程同步设计
133 0
linux多线程同步设计
使用一个例子探析:生产者消费者在多线程之间的通信的使用
使用一个例子探析:生产者消费者在多线程之间的通信的使用
89 0
|
网络协议 网络架构
网络通讯原理简介以及演示通讯过程
网络通讯原理简介以及演示通讯过程
149 0
网络通讯原理简介以及演示通讯过程
|
Linux 编译器 调度
Linux多线程-概念和控制(2)
Linux多线程-概念和控制(2)
Linux多线程-概念和控制(2)
|
大数据 Linux 调度
Linux多线程-概念和控制(1)
Linux多线程-概念和控制(1)

热门文章

最新文章