写点什么

Dataflow:Ruby 的声明式并发控制模型

2009 年 5 月 12 日

由于 Ruby 语言受到了一些函数式程序设计技术的影响,有些 Ruby 程序员随之采纳了 Erlang 或者 Haskell 的思想,甚者建立起了从 Ruby 到这些语言的桥梁,比如: Erlectricity

Larry Diehl 基于 Oz 语言的 Unification 概念,为 Ruby 引入了声明式并发控制模型。Oz 是一种多维编程语言,它主要作为一种函数式(包括延迟计算和即时计算)、分布式和并发编程语言而著称,但同时它也支持约束、逻辑、命令式和面向对象编程。

随着计算机中核心处理器数量的不断增加,Larry 希望声明式并发模型能给 Ruby 语言带来一些好处

  • 更加易读的代码
  • 简单但强大的并发控制

为了实现这个目标,Larry 应用了《Concepts, Techniques, and Models of Computer Programming》一书中描述的数据流线程行为(Dataflow threading behavior)概念:

如果一个操作试图使用一个未绑定的变量,该怎么办?如果纯粹从审美角度来看,这个操作应该等待,直到其它线程绑定了这个变量再继续进行。这种“文明礼貌”的线程行为被称之为数据流线程行为(Dataflow threading behavior)。

为了用 Oz 实现这个概念,Larry 应用了 Unification:

Unification 的思想是用逻辑方程来描述值,而逻辑方程可以自动被一些合一算法(unification algorithm)所解决。

那么在实际应用中,我们就可以这样编写代码了(这段代码来自 Dataflow 项目网站):

复制代码
# Local variables
include Dataflow
local do |x, y, z|
# notice how the order automatically gets resolved
Thread.new { unify y, x + 2 }
Thread.new { unify z, y + 3 }
Thread.new { unify x, 1 }
z #=> 6
end

用 local 或者 declare(实例变量)创建一些变量,然后用 unify 来绑定这些变量。

Oz Ports (非确定行为) 或者 Erlang 化 Actors 就是两个很好的例子。

但 Brian Morearty 也指出了对 Dataflow 调试、性能和内存的一些有意思的担心 。随后 Larry Diehl 在 Brian 的博客中进行了解释

有一点需要注意的是,由于这个库支持绿色线程(green threads)和本地线程池实现,它已经让 JRuby 在 MRI 上光芒四射了。

查看英文原文: Declarative Concurrency For Ruby With Dataflow

2009 年 5 月 12 日 00:161022

评论

发布
暂无评论
发现更多内容

甲方日常 8

句子

工作 随笔杂谈 日常

区块链技术破解数字版权保护难题

CECBC区块链专委会

区块链 版权保护 数字技术

区块链技术应用于链接智慧医疗

CECBC区块链专委会

区块链 社会保险 智能医疗

为稳外贸保驾护航 区块链交易平台显身手

CECBC区块链专委会

区块链 银行 福费廷

宁波新基建之路 基于制造优势破题智慧发展

CECBC区块链专委会

新基建

智能商业时代的思考(一)从在线化到网络化

刘旭东

拼多多 淘宝 智能商业 网络协同

java安全编码指南之:声明和初始化

程序那些事

安全编码 java安全编码 编码指南 对象初始化

Flink从保存点启动应用-18

小知识点

scala 大数据 flink

人生革命由自律发起

胡迪伦

自学编程 拖延症 懒惰 死循环

拥抱K8S系列-04-基于docker部署更多应用

张无忌

Docker 标准化 vsftpd

怎么向女朋友解释什么叫区块链?

艾小仙

比特币 区块链 以太坊 defi

拥抱K8S系列-05-基于docker部署面临的问题

张无忌

Docker 运维

职场求生攻略答疑篇之 3 —— 数据是土地

臧萌

数据 职场成长

Elasticsearch之mapping

北漂码农有话说

Google鼓励的13条代码审查标准 [建议收藏]

简爱W

透彻理解AQS源码分析系列之AQS基础二

InfoQ_d2212957090d

首个数字银行卡明年发行,广州出台区块链措施支持大湾区

CECBC区块链专委会

区块链 金融科技 社会

【MySQL】我这样分析MySQL中的事务,面试官对我刮目相看!!

冰河

MySQL 面试 事务 隔离级别 冰河

云原生 go-zero 微服务框架

Kevin Wan

go golang microservice go-zero 微服务框架

商业通识 : 商业为什么能进步?

Walker

学习 得到 个人成长 商业

oeasy教您玩转linux010206toilet

o

为什么Java二维数组不用指定列的长度

Rayjun

Java 数组

商业通识 : 商业到底是什么?

Walker

学习 得到 个人成长 商业

[翻译]Defer,Panic,and Recover

卓丁

golang defer panic recover

JavaScript 深拷贝与浅拷贝

梁凤波

妈妈,今天您几点下班?

脑极体

2020-09-03-第十三周作业

路易斯李李李

持续集成有什么好处?快来看鸭

清菡

jenkins

SpringBoot 缓存之常用注解

hepingfly

Java 缓存 springboot 注解

如何将VSCode变成绿色版本

lmymirror

vscode 教程

2020-09-03-第十三周学习总结

路易斯李李李

编译系统设计赛(华为毕昇杯)技术报告会|5月1日

编译系统设计赛(华为毕昇杯)技术报告会|5月1日

Dataflow:Ruby的声明式并发控制模型-InfoQ