在 2025 收官前,看清 Data + AI 的真实走向,点击查看 BUILD 大会精华版 了解详情
写点什么

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

  • 2009-05-12
  • 本文字数:867 字

    阅读完需:约 3 分钟

由于 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-05-12 00:162366

评论

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

Jenkins: 重置管理员密码

吴脑的键客

jenkins

2021一位Java中级程序员的跳槽面经,springmvc源码解析pdf

Java 面试 后端

直播回顾 | seL4基金会主席谈物理系统安全工程实践

鉴释

自动驾驶 操作系统 微内核 在线研讨会

分布式服务下,消息中间件改造

Java 架构 面试 分布式 后端

2021年Android岗位BAT大厂面试题知识点小结,阿里巴巴安卓面试题答案

android 面试 移动开发

如何用人工智能技术优化 WebRTC 产品(内附具体方案)

融云 RongCloud

2021Java最新大厂面试真题,37岁程序员被裁

Java 面试 后端

2021Java最新大厂面试真题总结,入职阿里啦

Java 面试 后端

阿里淘技术带佬新作:设计模式的完美演绎,共计1290页

Java 程序员 架构 面试 计算机

2021互联网大厂Java面经合集,阿里面试官必问

Java 面试 后端

2021年Android大厂面试,送大厂面经一份

android 面试 移动开发

2021京东最新Java面试真题解析,2021Java开发面试解答

Java 面试 后端

2021年Android工作或更难找,2021Android面经

android 移动开发

2021年Android工作或更难找,深入剖析原理

android 面试 移动开发

三维可视化数字能源系统,助力智慧园区高效能源管理

ThingJS数字孪生引擎

大前端 物联网 可视化 数字孪生

科创人|华傲数据CEO贾西贝:梦想驱动的九个人生抉择

科创人

科创人|华映资本章高男:好奇心顽童,趋势焦虑者,反套路投资人

科创人

个推融合实人认证服务和视觉智能技术,推出青少年网络游戏防沉迷解决方案

个推

AI 人脸识别

2021Java面试心得,淘汰机制、缓存雪崩

Java 后端

个推0代码数据可视化实操:基于Tableau的中国奥运数据探索

个推

2021年Android大厂面试,劲爆

android 面试 移动开发

2021Java最新大厂面试真题,Java面试宝典pdf

Java 面试 后端

2021Java精选面试实战总结整理,Java程序员面试算法宝典

Java 面试 后端

2021Java者未来的出路在哪里,怒斩获了30家互联网公司offer

Java 面试 后端

2021Java面试心得,Spring的XML解析原理

Java 面试 后端

M-SQL:超强的多任务表示学习方法

华为云开发者联盟

sql 自然语言 M-SQL SQL语句 多任务

2021Java进阶者的新篇章,做了5年Java

Java 面试 后端

2021Java高级进阶学习资料,StringBoot编程式事务与声明式事务

Java 面试 后端

2021Java高频精选面试题讲解,2021Java大厂面试真题

Java 面试 后端

百亿级日志流分析实践 | 剖析个推SDK后效分析功能实现原理

个推

消息推送 sdk

2021Java网络编程总结篇,三年老Java经验面经

Java 面试 后端

Dataflow:Ruby的声明式并发控制模型_Ruby_Sebastien Auvray_InfoQ精选文章