• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

通过Blackboard探索Ruby的元组空间持久化

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

Ruby因为其1.8版本的用户空间线程模型而饱受批评。Luc Castera在RubyNation会议上给出了通过Ruby和元组空间进行并行编程的演讲。在介绍了目前诸多应用(如Ruby 1.8、Ruby 1.9、JRuby和Erlang等)所实现的不同的线程模型之后,Luc介绍了Ruby的多进程模型(图片和引文均来自于该演讲):

\

\
\
  • 优点:\
    • 不再需要共享内存\
    • 可利用多CPU来提升性能\
    • 在调用阻塞的系统调用之时不会阻塞全部的线程\
    • 可伸缩性\
    • 容错性\
    \
  • 缺点:\
    • 进程的创建、执行和清理代价都很大\
    • 需要使用大量内存(将Ruby虚拟机载入每个进程之中)\
    • 需要一种方式来实现进程间通信\
    \
\

实现进程间通信有多种选择:数据库(例如在Mongrel或者Thin等应用服务器集群中使用)、RabbitMQ等队列(Nantie的解决方案)、DRB、ActiveMQ,或者元组空间。
\Luc比较了两个元组空间的实现:Rinda和他自己开发的Blackboard。元组空间提供了一个元组的容器,可以实现并行访问。元组一般提供三个访问原语:write(将一个元组写入元组空间),read(从元组空间中读取一个元组),take(从元组空间中读取一个元组并将其移除)。

\

Linda是一个协调模型,由David Gelernter和Nicholas Carriero提出,用于解决全局对象协调的问题。
\Rinda是Linda的Ruby实现,而且是一个内置程序库。一个Rinda元组可能看起来是这个样子的:t1 = [:add, 5, 9],客户端可能会将其解释为一个将两个数相加的任务。

\

Rinda最大的缺陷是其不支持持久化,这样一旦程序停止或崩溃的话,所有在元组空间中的元组则会丢失。
\这便是Luc开发Blackboard的原动力。Blackboard是一个基于Key-Value数据库Redis的一个元组空间实现,这样它便拥有了持久化的能力。

\
[Redis]和memcached很相似,但是数据集不易失。取值可以为字符串,就如同memcached一样,但是还支持使用原子操作来push/pop诸如列表和集合之类的元素
\

该API的使用范例如下:

\
\ts = Blackboard::TupleSpace.new\\ts.write [:calculator, :add, 1, 2]\ts.take  [:calculator, :add, nil, nil]\
\

基准测试显示了Rinda和Blackboard的区别(摘自该演讲):

\
  Rinda Blackboard
Write (1000) 0.042749 0.253068
Take (500) 0.082744 15.844250
Read (500) 0.020098 20.098478

当前的实现只是第一步,Luc计划弃用Redis而实现一个Erlang的Blackboard定制实现,这样就可以方便地使用Ruby这样的第三方语言进行调用。

\

查看英文原文:Exploring Tuple Spaces Persistence In Ruby With Blackboard


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
RubyonRails入门级简介发布时间:2022-07-14
下一篇:
学习Ruby你需要了解的相关知识(rvm,gem,bundle,rake,rails等)发布时间:2022-07-14
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap