请问数据流驱动方式的现状,多给点资料

[复制链接]
查看11 | 回复0 | 2007-9-19 06:42:48 | 显示全部楼层 |阅读模式
在面向对象的编程思想出现以前,文本编程语言主要采用的是面向过程的编程方法。面向过程有时候也被成为控制流驱动的编程方法。想我以前编程序,经常要先设计一个流程图,然后,照着流程图翻译成 C 代码就行了。
LabVIEW 程序是数据流驱动的,这与面向过程的程序还是比较相似的,但是也有一些区别。
面向过程的程序执行起来,就只有一条线,代码按照设计好的顺序一条一条执行下去。代码中的某一条语句,即便它的输入条件都已经被满足,它也要等到它前面的代码都被执行完后,才能被运行。
数据流驱动的程序就已经从一条线扩展成一张网了(有时候 LabVIEW 程序的框图线连得乱七八糟,就像一张网:)。一个节点运行完,数据从这个节点输出,会同时被传给所有用到它的其它节点去。一个节点只要它所有的输入都已经准备好了,就会被执行,不需要等待其它节点执行完。这样一来,经常有多个节点同时运行着的,LabVIEW 会自动把他们放到不同的线程中去运行。这就是数据流驱动的程序的一大特性:是自动多线程运行的。一般的文本编程语言,除非有显示的调用开辟新线程函数,否则所有代码都在同一个线程内顺序执行。
自动多线程,为编程人员带来的不少方便。但是,由于多线程程序更为复杂,可能导致出错的隐患更多,LabVIEW 不得不做一些其它语言不需要做的工作,来保证用户可以方便的用 LabVIEW 开发出安全高效的程序。
多线程程序中最常见的问题就是多个线程访问同一资源或内存时发生冲突。先以内存中的数据为例,程序运行在单线程状态下,写进这块内存的数据是什么,下次读出来一定就是你写进去的。而多线程状态下就不一定了,说不定在读写之间,内存被别的线程修改了,读出来的数据就是错误的。一般的文本语言不需要编译器来考虑如何防止用户做出类似的错误操作,因为他们默认情况下只会使用一个线程。多线程一定是在用户有意识开辟的。既然是有意识开辟的,用户在使用多线程的时候就也会留心类似的不安全问题。LabVIEW 却不能像其它语言编译器一样,不去考虑这个问题,LabVIEW 用户会在无意识的状态下就编写出多线程的程序来。如果用 LabVIEW 写出来的程序总是出错,LabVIEW 就会渐渐失去客户。
LabVIEW 采取的保护措施之一就是它的传参方式。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行