写点什么

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

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

关注

评论

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

Elephant Swap的LaaS方案迅速崛起,构建全新DeFi2.0协议

鳄鱼视界

Qt|编辑框的使用总结

中国好公民st

qt 7月月更

NFT数字藏品系统搭建—app开发

开源直播系统源码

软件开发 数字藏品 NFT数字藏品系统

深浅拷贝

Jason199

js 深拷贝 浅拷贝 7月月更

STM32+ESP8266+MQTT协议连接OneNet物联网平台

DS小龙哥

7月月更

java零基础入门-java8新特性(上篇)

喵手

Java 7月月更

Elephant Swap的LaaS方案优势分析,致eToken表现强势

股市老人

Android 开发遇到的Exception

沃德

android 7月月更

从源码上学习 MockMvc 的使用

安逸的咸鱼

Java 源码 Mock测试框架 7月月更

干货分享-作为Lead 接手一个新的数据团队一 问题盘点 与Insights的发现

松子(李博源)

经验分享 数据分析师 成长笔记 带团队

Docker 安装 Nginx 部署前端项目

宁在春

nginx Docker Vue 7月月更

谈谈程序员如何提高自己的写作能力

宇宙之一粟

写作 7月月更

云原生(十) | Kubernetes篇之Kubernetes简介

Lansonli

云原生 k8s 7月月更

mysql进阶(十七)Cannot Connect to Database Server问题分析

No Silver Bullet

MySQL 数据库 7月月更

LeetCode-88. 合并两个有序数组(java)

bug菌

Leet Code 7月月更

【愚公系列】2022年07月 Java教学课程 06-常量

愚公搬代码

7月月更

数据结构-顺序表的实现

芒果酱

数据结构 C语言 7月月更

strncpy() 复制字符串(受长度限制)

謓泽

7月月更

Python干货篇——列表及列表常用内置函数

Java学术趴

7月日更

Prometheus 2.37.0 新特性

耳东@Erdong

release Prometheus 7月月更

C#入门系列(二十七) -- LINQ简析

陈言必行

7月月更

关于数据产品经理的三个小的知识点

松子(李博源)

数据中台 数据产品经理 数据产品

在 Kyma 云原生平台上开发并部署 Node.js 应用

汪子熙

Kubernetes 云原生 SAP Kyma 7月月更

开幕在即 | “万物互联,使能千行百业”2022开放原子全球开源峰会OpenAtom OpenHarmony分论坛

OpenHarmony开发者

OpenHarmony

【函数式编程实战】(二)代码的行为参数化传递

小明Java问道之路

函数式接口 Lambda 函数式编程 行为参数化 7月日更

zookeeper-运行期间的leader选举与observer

zarmnosaj

7月月更

QT exe只允许运行单个

小肉球

qt 7月月更

Qt | 模态对话框和非模态对话框 QDialog

YOLO.

qt 7月月更

敏捷 ? DevOps ?

FunTester

另类加法与走方格的方案数

未见花闻

7月月更

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