写点什么

Kilim:actor 模型和消息传递的 Java 实现

  • 2008-07-03
  • 本文字数:1049 字

    阅读完需:约 3 分钟

正像在“多核危机:Scala vs. Erlang ”一文中所讲的,面对当前、尤其是未来的多CPU,需要大量的并行性计算,那么并发的消息传递和actor 模型将成为一种很有希望的解决之道。这些机制在Erlang 中是完全内置的,Scala 的框架中则包含了Scala Actor 库。在Java 的世界中,同样也存在一个纯Java 的实现—— Kilim

Kilim 是一个 Java 消息传递框架,它提供了超轻量级的线程和工具,可以在这些线程之间进行快速、安全、零复制的消息传递。

Kilim 包含如下组件:一个字节码后期处理程序(“weaver”),带有多个缓冲 mailbox(多生产者,单消费者队列)的运行时库,一个用户级的调度器,以及一个类型系统。它的类型系统对消息内部的指针别名增加了某些约束,确保线程之间不会彼此干扰。

而且它的性能看起来很不错。据 Sriram Srinivasan 在 Google Tech Talk 的演讲所称,Kilim 的任务切换比 Java 的线程切换快出 1000 倍,它的消息传递比 Erlang 快 3 倍。

Kilim 的用法是在方法和参数上标注 Annotation。如果一个方法被标注为 @pausable,则说明它直接地或者间接地调用了其他可暂停的方法,这种方法在其调用链中的某处,最终会调用 Kilim 的方法,比如Actor.sleep()或者Mailbox.get()。字节码后期处理器会将这些被注释的代码转换为延续``传递风格(continuation passing style)的代码。某些语言可以直接支持“延续”。其实,之前在一些著名的 Web 框架,比如 RIFE 和 Jetty 之中,“延续”就已经改头换面出现在 Java 中了。

另外,用于参数的标注包括@free、``@cuttable 或``@safe。Sriram Srinivasan 和 Alan Mycroft 在 ECOOP 2008 的一次演讲中描述了这些参数修饰符:

这些修饰符可以理解为一个在对象树中的对象的两种正交的特性:第一,它是否被另一个对象(在后面的情况中被称为“根”)所引用;第二,它是否在结构上可以改变(它的指针型域(pointer-valued field)是否是可分配的)。第二种性质具有传递性,如果一个对象的父亲是在结构上可改变的,那么它的孩子也是。

给定这些以后,可以判定,如果一个对象是对象树的根,并且它在结构上是可改变的,则这个对象是“自由的(@free)”。一个可切割的(@cuttable)对象可能是、也可能不是根,但它是 structurally modifiable。如果一个对象具有安全(@safe)特性,则不是 structurally modifiable(由于传递性),而不关心它是否是根。

Actor 模型出现的场合越来越多,无论未来你在哪种平台上用什么语言编程,Actor 模型都会是一个十分重要的概念。

查看英文原文 Kilim - actors and message passing in Java

2008-07-03 00:276646
用户头像

发布了 53 篇内容, 共 16.2 次阅读, 收获喜欢 2 次。

关注

评论

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

骏彩竞猜分布式解决方案之路

TiDB 社区干货传送门

安装 & 部署

一言难尽的Prometheus监控实践

TiDB 社区干货传送门

实践案例

TiDB BR 备份至 MinIO S3 实战

TiDB 社区干货传送门

管理与运维

TiSpark数据写入过程解析(源码解析)

TiDB 社区干货传送门

TiDB 底层架构

TiCDC 4.0.15 初体验

TiDB 社区干货传送门

实践案例

TiDB 如何获取集群创建时间

TiDB 社区干货传送门

实践案例 TiDB 底层架构

【白皮书】TiDelta,一款简单易用的 TiDB 性能对比 Web 工具。

TiDB 社区干货传送门

前缀索引在特殊场景下的优化尝试

TiDB 社区干货传送门

实践案例 TiDB 底层架构

大事务的处理方式对比

TiDB 社区干货传送门

实践案例

dm-V1.0.5使用汇总

TiDB 社区干货传送门

管理与运维

DR Auto-Sync 搭建和计划内切换操作手册

TiDB 社区干货传送门

TiDB 如何在 LVS FULL NAT 模式下显示客户端真实 IP

TiDB 社区干货传送门

实践案例

TiDB 悲观事务模式和Mysql的表象区别

TiDB 社区干货传送门

探索TiDB Lightning源码来解决发现的bug

TiDB 社区干货传送门

TiDB 底层架构

TiDB在个推的落地实践 | 解决热点难题,提升性能超千倍

TiDB 社区干货传送门

性能调优

高并发请求下 TiDB 集群的业务无损升级

TiDB 社区干货传送门

记一次简单的Oracle离线数据迁移至TiDB过程

TiDB 社区干货传送门

TiDB 在 Cisco Webex 架构中的部署和应用

TiDB 社区干货传送门

TiDB 元信息管理方式

TiDB 社区干货传送门

TiDB 底层架构

TiDB Binlog 支持 Oracle 目标库功能用户手册

TiDB 社区干货传送门

迁移

使用 TiUP 安装部署 TiDB 集群实验流程

TiDB 社区干货传送门

版本升级 集群管理 管理与运维 安装 & 部署 扩/缩容

使用SPM固定执行计划

TiDB 社区干货传送门

TiDB体系结构

TiDB 社区干货传送门

TiDB 底层架构

传统行业数据架构发展变化

TiDB 社区干货传送门

数据库架构选型

JOIN 查询的执行计划 比较

TiDB 社区干货传送门

性能调优 TiDB 底层架构

TiSpark On Kubernetes实践

TiDB 社区干货传送门

实践案例

TiDB 运维基础操作脑图

TiDB 社区干货传送门

记一次TiDB的临时救场

TiDB 社区干货传送门

实践案例

【考试指南】TiDB 5.0认证指南之PCTA PCTP

TiDB 社区干货传送门

TiDB 底层架构

在CentOS7上进行TiDB/PD/TIKV编译分享

TiDB 社区干货传送门

实践案例 安装 & 部署

ticdc没报错,tso却不变的奇怪现象

TiDB 社区干货传送门

Kilim:actor模型和消息传递的Java实现_Java_Niclas Nilsson_InfoQ精选文章