写点什么

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

评论

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

Azure AI Studio使用体验——企业级AI工厂

Bruce Talk

AI Azure AI Studio Azure AI

软件测试/人工智能|Python数据可视化神器pyecharts教程(三)

霍格沃兹测试开发学社

Kafka Broker开小差了~

腾讯云混沌演练平台

kafka 混沌工程

世界第一!蚂蚁图计算TuGraph打破LDBC SNB-BI世界纪录

TuGraphAnalytics

神经网络大模型的智慧之源

百度开发者中心

人工智能 nlp 大模型

文心一言 VS 讯飞星火 VS chatgpt (154)-- 算法导论12.3 1题

福大大架构师每日一题

福大大架构师每日一题

Go未来演进:基于共同目标和数据驱动的决策

Tony Bai

golang 编程语言 Go 语言 gopher

从React Hooks看React的本质

canonical

前端 低代码 React

5.5V 至 36V 输入 3A 500kHz 降压转换器

梦笔生花

项目经验分享:机器学习在智能风控中的应用

YoLo

AI

软件测试/人工智能|Python数据可视化神器pyecharts教程(一)

霍格沃兹测试开发学社

软件测试/人工智能|Java Edit Plus 安装与配置指南

霍格沃兹测试开发学社

【写作训练营打卡|05】 什么是 Web3?

写作 web3

Zookeeper数据存储源码剖析

极客罗杰

.h 头文件 | AI工程化部署

AIWeker

c AI工程化部署

写代码还是写标书

escray

技术人写作 21 天技术人写作行动营 21 天

基于多维数据库的全面预算软件,实现企业管理数字孪生

智达方通

企业管理 多维数据库 全面预算 全面预算软件

客户案例 | 博睿数据全面保障昆仑银行业务稳定性

博睿数据

C 语言入门:如何编写 Hello World

小万哥

c 编程 程序员 后端 软件开发

数据驱动构建企业动态全面预算管理架构

智达方通

数据驱动 全面预算管理

11 月 NFT 动态:交易量增长,Blur 地位加强

Footprint Analytics

区块链游戏 NFT

如何写好一份架构设计评审文档

童子龙

基础架构

浅谈接口自动化测试

QE_LAB

接口自动化测试

英特尔锐炫A750:性能持续提升,主流玩家高性价比之选

E科讯

ASP.NET Core 8 在 Windows 上各种部署模型的性能测试

EquatorCoco

.net 后端 性能测试 asp

软件测试/人工智能|Python数据可视化神器pyecharts教程(二)

霍格沃兹测试开发学社

免费的!十大数据可视化工具软件盘点

2D3D前端可视化开发

数据可视化 可视化软件 可视化工具 信息可视化 可视化设计

火山引擎边缘计算用硬核助力赛事直播

火山引擎边缘云

边缘计算 直播 边缘云 边缘云原生

软件测试/人工智能丨人工智能会替代软件测试工程师吗

测试人

人工智能 软件测试

web组态(BY组态)接入流程

Geek_195e67

物联网 工业互联网 web组态 组态 by组态

DAPP代币质押铸币挖矿系统开发(详情开发)

l8l259l3365

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