分享

2015.8.8.18.20labview

 阿斯顿1图书馆 2015-08-08
labview为数据流驱动的编程方法,这与面向过程的程序比较相似,但是也有区别。
面向过程的程序完全按照顺序执行,即使输入条件全部满足,但是还是要等到他前面的代码执行完毕,此条指令才会被执行。但是对于labview的数据流驱动而言,程序不仅在一条线上流动,而且可以在数据线上出现分叉,这样可能出现一个程序的多个数据在多条线上流动。这时,一个会出现许都个节点,当一个节点运行完成,数据从这个节点输出,为其节点所用。而且,只要一个节点他所需要的输入都已准备完毕,这个节点就会被执行,而不必等待其他节点执行完成。这样就会出现多个节点同时运行的情况,这就是labview的自动多线程运行。
  但是,这是由于自动多线程也会造成一些不必要的隐患。最常见的问题就是多个线程访问统一资源或是内存时的冲突。以内存为例,程序在多线程状态下,一块内存的读写,可能会被多个线程操作,这就造成读出的数据出现错误。而一般的文本语言则不需要考虑此类问题,因为他们默认情况下只会使用一个线程。对此,labview给出的处理措施之一就是他的传参方式。

传值和传引用
     现自常用的文本编辑语言,在调子函数是的传参方式一般多为传引用,即告诉被调用的函数的是函数参数的位置,而不是参数的数据。c++为了保持其对c语言的兼容性,在简单的数据上还是使用传值方式,但是对于大块数据而言,也基本上采用引用传递方式。

理论上讲,一个数据流驱动的编程语言,可以只采用值传递。数据在每一个连线分叉的地方,都做一个拷贝。这样任何一个节点所处理的数据都是他专用的,不用担心线程之间会互相影响。
      在labview中,一个节点得到了输入数据,labview如果能够确定这个输入数据的内存肯定不会被其他部分的程序所使用到,并且恰好节点的一个输出需要一块内存,labview就不再为输出数据令开辟一块内存,而是使用那个输入数据所在的内存,这就是缓存重用。   
  这种行为实质上与传引用是一样的,告诉函数的数据一个地址,然后函数直接在该地址上对数据进行处理。但是labview程序员是无法设置某个参数是传值还是传引用。但是程序员可以通过改变程序风格来帮助labview准确判断该参数是执行传值还是传引用。如移位寄存器和缓存重用就是告诉labview采用传引用的方式。
      labview虽然不能设置数据传递给节点时,使用值传递还是引用传递。但是labview中有一类专门的"引用控件",用来保证大块数据不被频繁复制,或者在不同线程内对同一内存进行操作。一般叫做refnum的控件都属于这一类,他们所代表的数据是不随数据线流动的。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多