写点什么

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:276507
用户头像

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

关注

评论

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

快速定制OCR识别模型好帮手:百度EasyDL OCR自训练平台上线啦!

百度大脑

EasyDL-OCR

身份和访问管理标准及挑战

龙归科技

物联网 云服务 认证授权 身份和访问管理

更揽群碑荟一堂|靠谱点评

无量靠谱

模块 1 作业

流水亮

Vue cli项目 修改运行命令和端口号

空城机

Vue 大前端 4月日更 vue cli

实时 OLAP, 从 0 到 1

Apache Flink

flink OLAP 区块链技术

字节三面:对于Spring你了解多少?如果你会了这150道题 ,吊打面试官岂不是洒洒水?

北游学Java

Java spring Spring Framework spring Boot Starter spring cloud alibaba

OSI七层模型

赖猫

TCP 后台开发 后端 网络编程 网络协议

融云音视频产品免费 20 万分钟 助力通信场景全搭建

融云 RongCloud

深度图解Redis Cluster原理

leonsh

redis Gossip redis cluster

想靠接私活月入5W?建议根据这几个开源的SpringBoot项目(含小程序)模仿一下~

Java架构师迁哥

好运转购物商城

飞亚科技

课程完结有感

Kalman

产品经理 产品经理训练营

Nginx源码编译安装与运行

马里奥

nginx 安装 笔记

年度盛会 | Atlassian Team 2021 全球大会重磅嘉宾介绍

Atlassian

Agile Zoom Atlassian Slack

绝了!阿里面试官跟我死磕MySQL,结果我却拿了个高薪offer

码农之家

Java 程序员 面试 MySQL 高可用 刷题笔记

手机自带的多功能百宝箱,没人用真的太可惜了。

彭宏豪95

iphone 效率 工具 苹果 4月日更

情指勤指挥调度平台搭建,公安重点人员管控平台搭建

StreamX: 流批一体大数据平台正式开源

ApacheStreamPark

「 人气作者 TOP10 公布 」—— InfoQ 写作平台【 1 周年盛典 】

InfoQ写作社区官方

1 周年盛典 热门活动

逐行解读Spring- 没人比我更懂循环依赖

学Java关注我

Java 编程 架构 编程语言 技术宅

数据中台在企业数字化转型中的践行(下篇)

EAWorld

Java入门第一课

ベ布小禅

4月日更

Redis-Sentinel 深入浅出原理和实战

leonsh

redis redis sentinel

如何横扫大厂Offer?这份“1000道Java后端面试速成笔记”程序员(银四)必备

比伯

Java 程序员 程序人生 软件架构 java编程

跟着源码学IM(八):万字长文,手把手教你用Netty打造IM聊天

JackJiang

Netty 即时通讯 IM

二阶单位圆

山@支

Rust:关于闭包的一点研究

Microwood

rust 闭包 closure

TimSort — 以人命名的排序法

D

数据中台在企业数字化转型中的践行(上篇)

EAWorld

架构训练营作业-模块二

西伯利亚鼯鼠

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