写点什么

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:161017

评论

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

【Elasticsearch 技术分享】—— 十张图带大家看懂 ES 原理 !明白为什么说:ES 是准实时的!

程序员小航

Java elasticsearch 搜索 ES Lucene Elastic Search

oeasy教您玩转linux010107那啥在哪 whereis

o

菜市场和房屋中介

escray

学习 面试 面试现场

面试官想知道都在这里

escray

学习 面试 面试现场

穿什么衣服去面试?

escray

学习 面试 面试现场

区块链技术服务于税收治理的深圳实践

CECBC区块链专委会

区块链 电子发票 税收

如何开成功一个回顾会

技术管理Jo

敏捷教练 回顾会 引导者

第 0 期架构师训练营第 6 周作业1

傅晶

第 0 期架构师训练营第 6 周作业2-总结

傅晶

求索十五载:百度地图绘就的时代浪漫

脑极体

避免栽坑之掌握Jenkins工作原理

清菡

jenkins

初识Druid——实时OLAP系统

justskinny

大数据处理 大数据技术 Apache Druid

安全系列之——数据传输的完整性、私密性、源认证、不可否认性

诸葛小猿

加密解密 rsa 签名验签 数字证书 CA

架构师训练营第 11周作业和感想

tuuezzy

极客大学架构师训练营

区块链技术发展面临七大关键挑战以及未来的五大展望

CECBC区块链专委会

区块链 新基建 数字型资产

第 0 期架构师训练营第5 周作业1

傅晶

第 0 期架构师训练营第 5 周作业 2-总结

傅晶

抗疫复产,CDN助企业破局发展

华为云开发者社区

CDN 网络 华为云 CDN加速 企业应用

一篇文章搞懂前端学习方法与构建知识体系

三钻

学习 前端

并发杂谈系列0 序与目录

八苦-瞿昙

随笔杂谈

年薪80万难觅技术人才 杭州区块链人才需求旺盛

CECBC区块链专委会

区块链 新基建 大学专业

最强云硬盘来了,让AI模型迭代从1周缩短到1天

华为云开发者社区

SSD 云存储 All-Flash 云硬盘 擎天架构

LeetCode题解:155. 最小栈,单个栈+对象存储,JavaScript,详细注释

Lee Chen

LeetCode 前端进阶训练营

Luajit字节码解析之KNUM

whosemario

lua

微前端在民生 APaaS/PSET 平台的探索与实践

亻尔可真木奉

探索与实践 案例分享 微前端

企业网络安全漏洞多,这些等保服务来填坑

华为云开发者社区

Web 安全 防火墙 等保 DDoS

建设开发者生态:6项华为API管理原则落地

华为云开发者社区

开发者 API 华为云 API Explorer平台 应用技术

Mysql探索之索引详解

不才陈某

MySQL

揭开数组的真面目

Java旅途

Java 数据结构 数组

Flink-状态后端作用-11

小知识点

scala 大数据 flink

消息队列之推还是拉,RocketMQ 和 Kafka 是如何做的?

yes的练级攻略

kafka RocketMQ

4月17日 HarmonyOS 开发者日·上海站

4月17日 HarmonyOS 开发者日·上海站

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