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项目合作开发,请与我们联系。

相关文章
|
7月前
|
数据格式
LabVIEW编程LabVIEW控制JJ天平例程与相关资料
LabVIEW编程LabVIEW控制JJ天平例程与相关资料
51 1
|
7月前
|
API Windows
LabVIEW使用共享变量在两台计算机之间进行通信
LabVIEW使用共享变量在两台计算机之间进行通信
205 0
|
7月前
|
数据采集 设计模式 缓存
LabVIEW生产者消费者架构
LabVIEW生产者消费者架构
170 2
|
7月前
|
存储 监控 网络协议
LabVIEW中的数据通信方法
LabVIEW中的数据通信方法
47 0
|
7月前
LabVIEW编程LabVIEW开发天平Parr 4848例程与相关资料
LabVIEW编程LabVIEW开发天平Parr 4848例程与相关资料
63 0
54【网络工程】Socket通信过程
【网络工程】Socket通信过程
51 0
|
7月前
|
消息中间件 网络协议 前端开发
Socket编程实践模拟通信
Socket编程实践模拟通信
76 0
|
存储 算法 调度
《计算机操作系统-第五章》之线程与多线程模型
《计算机操作系统-第五章》之线程与多线程模型
179 0
|
存储 设计模式 网络协议
Socket通信原理及模型实现
Socket通信原理及模型实现
299 0
|
设计模式 监控 网络协议
Linux网络原理与编程——第十一节 网络基础及套接字
从system call(系统调用结构)开始往下,都是属于OS和硬件的范畴,我们一般的程序员所进行的开发,通常都是在用户层。(这个我们后面还会具体说到)。
215 0
Linux网络原理与编程——第十一节 网络基础及套接字