控制流和数据流

By guenchi at 2018-02-02 • 0人收藏 • 189人看过

控制流(Control flow) 和数据流(Data flow)


以a = x + y; b = a * a; c = 4 - a; 这样一段简单的程序为例,有两种编程模式,一种是以C语言为代表的命令式编程(imperative programming),语句的排列顺序隐式的刻画了程序的执行顺序(左图中虚线箭头表示执行顺序),有哪些语句可以并行执行,并不太明确,如果要在多个线程中执行这几条语句,为了防止出现多个线程间的读写冲突,可能要使用锁 (lock)等技术来保护某一个变量(某一段内存)防止出现data race。另一种编程模式是以Lisp为代表的函数式编程(functional programming),程序用一系列表达式来刻画,程序的执行不是按表达式的声明顺序来执行,而是从表达式中挖掘出各个表达式之间的数据依赖关系,把数据依赖关系用一个有向无环图来表示,图显式刻画了哪些表达式必须在另一些表达式之前求值,或者哪些表达式之间不存在依赖关系,可以并行执行。在并行和并发越来越多的世界,functional programming 和数据流程序正在越来越受重视。


数据流模型一般表示成有向无环图(Directed acyclic graph, DAG)。数据流模型的优势主要包括两方面:(1) 表示上的好处,显式描述了程序中的所有并行机会;(2)实现上的好处,数据流的执行引擎可以用很简单的方法支持并发和并行,而在控制流程序中对并发和并行的支持就要复杂的多。

登录后方可回帖

登 录
信息栏

Scheme中文社区

推荐实现 ChezScheme / r6rs / r7rs large
theschemer.org
Q群: 724577239

精华导览

社区项目

包管理器:Raven
HTTP服务器:Igropyr (希腊火)
官方插件:vscode-chez

社区目标:

完善足以使Scheme工程化和商业化的库,特别是开发极致速度的Web服务器和ANN模块。

一直以来Scheme缺少一个活跃的中文社区,同时中文资料的稀少,导致大多数因为黑客与画家和SICP而接触Scheme的朋友,在学完SICP后无事可做,不能将Scheme转换为实际的生产力。最后渐渐的放弃。
同时Chicken等实现,却因效率问题无法与其他语言竞争。本社区只有一个目的,传播Scheme的文明之火,在最快的编译器实现上,集众人之力发展出足够与其他语言竞争的社区和库。


友情链接:

Clojure 中文论坛
函数式·China


Loading...