写点什么

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

评论

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

逐鹿AI+、论道沪上,华为云企业快成长AI+大数据技术创新论坛在上海举行

说山水

为世界第一大癌症高效研发首创新药,AI大模型助力药物研发叩开未来之门

飞桨PaddlePaddle

人工智能 paddle 飞桨

软件测试 | Selenium-Grid架构

测吧(北京)科技有限公司

测试

我的多巴胺回来了!双手奉上在rumble上下载视频的最佳秘诀!

frank

SpringMVC框架适配模块及实现原理

互联网架构师小马

瓴羊Quick BI:数据大屏的智能解决方案

流量猫猫头

OpenFeign框架适配模块及实现原理

互联网架构师小马

重磅再推 | 基于OpenSearch向量检索版+大模型,搭建对话式搜索

阿里云大数据AI技术

人工智能 搜索引擎 企业号 6 月 PK 榜

软件测试 | Dalvik虚拟机是如何执行程序的

测吧(北京)科技有限公司

测试

GitHub标星159K的Java学习手册,太香了!

互联网架构师小马

Java

Pycharm配置远程调试

软件测试/测试开发丨Pytest测试框架学习笔记

测试人

程序员 软件测试 pytest

2023 可信数据库发展大会:近百位行业大咖将出席演讲

KaiwuDB

KaiwuDB TDBC 2023可信数据库发展大会

百度沈抖:大模型 产业智能化时代的新引擎

飞桨PaddlePaddle

百度 算法

GitHub热榜,亿级流量并发手册彻底揭开阿里高流量的秘密

互联网架构师小马

深入学习 Linux 操作系统的存储 IO 堆栈

KaiwuDB

KaiwuDB Linux存储 IO堆栈

字节算法中了80%!靠着这份GitHub上的算法小抄,成功斩获Offer

互联网架构师小马

Java 数据结构 算法 LeetCode

数据库的 Schema 变更实现

KaiwuDB

KaiwuDB Schema 锁表

NFTScan 与 SPACE ID 达成合作伙伴,支持 .bnb / .arb 域名搜索!

NFT Research

域名 NFT\

华为云企业快成长安全技术创新论坛广州站举办在即 都有哪些亮点干货?

说山水

注解切面适配模块及实现原理

互联网架构师小马

Wallys DR9074 4x4 Wlan module work on X86 device/DR9074 应用在X86。

Cindy-wallys

QCN9074 QCN9024

啥?PCB拼版对SMT组装有影响!

华秋PCB

PCB SMT PCB设计 PCB拼版 贴片

瓴羊Quick BI:商业智能工具的新标杆

巷子

Dubbo框架适配模块及实现原理

互联网架构师小马

KaiwuDB 数据库高可用方案及落地实现

KaiwuDB

KaiwuDB 数据库高可用

Python的离线安装

Bettertouchtool for Mac:触控板增强工具

背包客

macos Mac 软件 BetterTouchTool教程 Mac触控板增强 Bettertouchtool

TiDB x Catalyst丨秒级洞悉数据价值,TiDB 帮助“客户成功 SaaS 厂商”提升用户体验

PingCAP

数据库 分布式 TiDB

麒麟操作系统是什么?和linux的区别是什么?

行云管家

信创 麒麟操作系统

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