写点什么

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

评论

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

架构实战营-模块一作业

Alex.Wu

模块一作业

Geek_85eb5f

如何在 MacOS 上降级 Java 版本

escray

学习 8月日更

微服务的痛:用实际经历告诉你它有多坑(三)

我爱娃哈哈😍

微服务 架构设计

TP6+layui2.6.8开发的管理系统(FunAdmin),内置Curd命令模式 在线更新

funadmin

CMS layui 商城 管理系统 funadmin

一文为你介绍ServiceComb Service-Center三大高性能优化点

华为云开发者联盟

开源 微服务 注册中心 Service-Center

云小课|想实现资源全自动备份?看完这篇秘籍,不再蕉绿~

华为云开发者联盟

云备份 自动备份 备份策略

新生代农民工的十八般武艺,你都了解吗

华为云开发者联盟

DevOps 云原生 编程语言 编程规范 新生代农民工

架构实战课程 模块一作业

Frank

架构实战训练营模块 1 作业

斯蒂芬.赵

架构实战营

深入虚拟机探索Thread start

4ye

源码 线程 后端 JVM 8月日更

Vue进阶(七十二):css 样式中 逗号、空格、冒号、点号、~、>的区别

No Silver Bullet

Vue 8月日更

apipost使用脚本发送一个接口请求

与风逐梦

后端 开发工具 接口测试

面试侃集合之SynchronousQueue非公平模式篇

码农参上

非公平锁 SynchronousQueue 8月日更

在线JSON转HTML,TABLE表格工具

入门小站

工具

模块一作业

bin

0基础架构入门 - 1(架构概述)

felix

架构实战营 0基础架构入门

模块1作业

atob

Pulsar 周报 2021-08-09 ~ 2021-08-15

Apache Pulsar

Apache Pulsar StreamNative

故事篇:数据库架构演变之路

阿Q说代码

主从复制 读写分离 集群部署 8月日更 垂直拆分

微信朋友圈高性能复杂度分析

刘琦Logan

作业

Doctor Blind

架构实战营

模块一

Tim

架构实战营

linux笔记:极简方式安装mysql,建议收藏

小鲍侃java

8月日更

常见内存泄漏引起原因

金陵老街

百度地图开发-与地图的交互功能 06

Andy阿辉

android Android Studio Android 小菜鸟 8月日更

架构实战☞ 微信业务架构&学生管理系统架构设计

眼镜盒子

架构实战营

拆分电商系统为微服务

tjudream

微服务 电商 拆分

模块一作业:微信业务架构图与学生管理系统毕设架构设计

apple

深入了解现代web浏览器(第二部分)

GKNick

大前端 浏览器

架构实战营模块一作业

李焕之

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