10 月 23 - 25 日,QCon 上海站即将召开,现在购票,享9折优惠 了解详情
写点什么

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

评论

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

盘点6个最受欢迎的 Vue.js UI 库

秃头小帅oi

什么是渗透测试?有哪些类型?

小齐写代码

商用AI PC,能帮企业带来什么?

E科讯

JAVA请求示例获取1688商品详情数据API接口item_get-获得阿里巴巴商品详情(按关键词搜索商品列表)

Anzexi58

API 文档

大模型+搜索:构建完整技术栈,为企业定制化注入新活力

百度开发者中心

数字 大模型 人工智能、

多种方式获取淘宝商品详情数据,关键词搜索商品列表,店铺ID获取店铺所有商品,按图搜索获取商品详情数据

Anzexi58

API 文档

J17资本合伙人SKY LAI确认出席Hack .Summit() 2024区块链开发者盛会

TechubNews

『双向奔赴,绿动未来』 ——能效电气2024新品发布会

极客天地

骚操作之 持有 ReadOnlySpan 数据

八苦-瞿昙

C#

7万张H100打造的Open AI文生视频Sora功能原理详解|Sora注册全攻略

GPU算力

干货!Windbg 在 TDengine 内存泄漏调试中的应用与实践分享

TDengine

tdengine 时序数据库 内存泄漏 windbg

互联网大厂面试题解析之大疆一面

派大星

Java 面试题 互联网大厂面试

BEANZ NFT 概览与数据分析

Footprint Analytics

blockchain NFT

抢占市场先机:利用API商品数据接口激活您的数据资产

Noah

立即报名|3 月 8 日北京,稳定性 & 可观测沙龙来了!

阿里巴巴云原生

阿里云 容器 微服务 云原生

对比传统主机,云主机贵吗?是否值得购买?

一只扑棱蛾子

云主机

OpenMLDB v0.8.5 发布:认证功能完善,安全升级全面实施

第四范式开发者社区

人工智能 机器学习 数据库 开源 特征

请求示例JAVA获取淘宝商品详情数据API接口item_get-获得淘宝商品详情(按关键词搜索商品列表)

Anzexi58

API 文档

L2 网络 Mint Blockchain 正式对外发布测试网

NFT Research

blockchain NFT 测试网络

IDC 中搭建 Serverless 应用平台:通过 ACK One 和 Knative 玩转云资源

阿里巴巴云原生

阿里云 云原生 容器服务

可用于智能客服的完全开源免费商用的知识库项目

不在线第一只蜗牛

架构 开源项目 技术栈 智能客服

文生视频Sora模型发布,是否引爆AI芯片热潮

申公豹

人工智能

奇点云:SAFe框架下,我们对平台软件工程生产线做了4项改造

奇点云

大数据平台 制造业 奇点云

探索基于Stable Diffusion的智能绘画大模型

百度开发者中心

人工智能 深度学习 图像 大模型

京东商品详情数据获取item_get-获得JD商品详情,Java请求示例API接口

Anzexi58

iPaaS如何实现安全通信保障

RestCloud

信息安全 ipaas

用户使用433MHz无线模块时,出现偶尔无法收发数据的原因?

Geek_ab1536

比特币价格突破62000美元,近一个月涨幅超过40%

区块链软件开发推广运营

dapp开发 区块链开发 链游开发 NFT开发 公链开发

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