写点什么

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

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

关注

评论

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

“元宇宙”到底是啥?为啥火了?鼓励探索警惕忽悠

CECBC

MVCC的机制初识

卢卡多多

MVCC 11月日更

HW3 - 外包学生管理系统架构文档

WWH

架构实战营

技术改进项目的质量保障思路

QualityFocus

架构 软件测试 自动化测试 质量保障 技术改进

译文 | 科普:Pulsar 和 Kafka 架构对比

Apache Pulsar

kafka 架构 分布式 中间件 Apache Pulsar

博文推荐 | Apache Pulsar 对现代数据堆栈至关重要的四个原因

Apache Pulsar

kafka 架构 Apache Pulsar 数据堆栈 DataStax

VR和AR只是入门,真正的元宇宙远不止于此

CECBC

点进来,与白洞一起体验一场沉浸式智慧轨道之旅

脑极体

11.25直播预告|开源与SaaS水火不容?「观测云-可观测之路」第2期技术大咖为您解惑!

观测云

一文讲透自适应熔断的原理和实现

万俊峰Kevin

微服务 熔断 Go 语言 熔断器 限流熔断

16 K8S之容器健康监测

穿过生命散发芬芳

k8s 11月日更

消息队列表结构设计

guangbao

进击的Java(八)

ES_her0

11月日更

北鲲云超算携手西安电子科技大学开展高性能计算培训

北鲲云

NodeJs深入浅出之旅:内存控制(下)🐯

空城机

大前端 Node 11月日更

【Quarkus技术系列】「云原生架构体系」配置参考指南相关的功能机制配置介绍分析

码界西柚

入门 配置信息 Quarkus 11月日更

一个基于DPoS共识算法的区块链案例解析

Regan Yue

区块链 11月日更 细讲区块链

使用 JavaScript 创建和下载文件

devpoint

JavaScript File Blob 11月日更

Android C++系列:访问Assets 文件夹

轻口味

c++ android jni 11月日更

Golang Gin 框架参数解析介绍(三)

liuzhen007

11月日更

盲盒app开发

十月热点:EasyDL八大国产芯片实现模型部署全适配,度目智能门禁机CM-A1重磅发布!

百度大脑

人工智能 百度

双十一还是孤身一人?超强AI神器送你一个"对象"

百度大脑

人工智能 百度

什么是低代码平台?

石云升

低代码平台 11月日更

Ta们用数字种植绿色山河:牛津博士与储能之变

脑极体

你找的网络安全系列书籍,都在这了!

喀拉峻

网络安全 安全 信息安全

Go 语言,测试功能详解 - 下

微客鸟窝

Go 语言 11月日更

Python Qt GUI设计:QTimer计时器类、QThread多线程类和事件处理类(基础篇—8)

不脱发的程序猿

Python PyQt GUI 计时器 多线程类和事件处理

堪称“高并发”教程天花板的Alibaba《基础+实战+源码+面试+架构》

收到请回复

Java 程序员 后端 java面试

自定义View:多点触摸与实现任意拖动图片控

Changing Lin

11月日更

Pulsar的Chunk Message原理剖析

Zike Yang

Apache Pulsar 11月日更

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