红帽白皮书新鲜出炉!点击获取,让你的云战略更胜一筹! 了解详情
写点什么

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

评论

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

rxjs Observable 设计原理背后的 Pull 和 Push 思路

Jerry Wang

typescript 响应式编程 angular RXJS 6月月更

iMile 利用 Zadig 多云环境周部署千次,跨云跨地域持续交付全球业务

Zadig

DevOps 微服务架构 CI/CD 持续交付 国际化

钛动科技:我们的 Zadig 落地之路

Zadig

DevOps 持续交付 企业出海 研发效率

8年打磨,《游戏设计梦工厂》发布史诗级更新!

博文视点Broadview

高效远程办公的基石:有效沟通 |社区征文

wljslmz

远程办公 初夏征文

影响LED封装散热主要因素有哪些?

Dylan

LED LED显示屏 led显示屏厂家

助力极致体验,火山引擎边缘计算最佳实践

火山引擎边缘云

云计算 边缘计算 低时延 边缘云原生 边缘网络

妙!妙盈科技全面实施 Zadig 助力容器化建设,全面拥抱 Kubernetes 和云原生

Zadig

DevOps CI/CD 容器化 自动化运维 Zadig

中科方德技术专家直播:如何基于 OpenStack、Ceph 构建私有云平台? | 第 27 期

OpenAnolis小助手

Ceph 龙蜥大讲堂 中科方德 OpenStack 私有云平台

TTChat x Zadig 开源共创 Helm 接入场景,环境治理搞得定!

Zadig

DevOps 微服务 音视频 测试环境治理

年轻就要醒着拼,年轻就要勇于尝试

Zadig

DevOps 微服务治理 自动化运维 企业案例

智能指标驱动的管理和决策平台 Kyligence Zen 全新上线,限量内测中

Kyligence

基于字节码的统一异常上报实践

转转技术团队

异常机制 Java’

面试突击61:说一下MySQL事务隔离级别?

王磊

Java java面试

高校如何基于云原生构建面向未来的智慧校园?全栈云原生架构VS传统IT架构

York

云原生 数字化转型 智慧校园 教育科技

揭秘百度智能测试在测试自动执行领域实践

百度Geek说

测试

微博评论架构设计

泋清

#架构训练营

SOFARegistry 源码|数据同步模块解析

SOFAStack

源码解析 注册中心 数据同步 开源软件

亲测!Centos7部署PHP + Swoole

迷彩

Apache Linux 微服务 swoole 6月月更

龙书虎书鲸书啃不动?试试豆瓣评分9.5的猴书

图灵教育

编译原理 go语言

Vue3中如何使用异步请求?

Python研究所

6月月更

架构实战营第五模块课后作业

Geek_53787a

架构实战营

超级详细的 Maven 教程(基础+高级)

Ayue、

maven

CTO专访:合见工软深化产品布局 加速国产EDA技术革新

科技热闻

易快报:我们用 Zadig 实现万次构建部署,聪明运维,释放开发生产力

Zadig

DevOps 微服务架构 CI/CD 容器化 Zadig

ONES 创始人王颖奇对话《财富》(中文版):中国有没有优秀的软件?

万事ONES

悬赏平台并没有WEB端开发,在原生开发和混合开发中哪种合适?

开源直播系统源码

软件开发 app源码 原生开发 混合开发 悬赏平台源码

什么是外链和内链?

源字节1号

前端开发 后端开发 网站开发

java就业培训 | 怎么实现 SpringBoot 并行任务

@零度

JAVA开发 springboot

大数据培训 | Flink SQL窗口表值函数聚合实现原理

@零度

flink 大数据开发

揭秘!付费会员制下的那些小心机!

CRMEB

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