阿里、蚂蚁、晟腾、中科加禾精彩分享 AI 基础设施洞见,现购票可享受 9 折优惠 |AICon 了解详情
写点什么

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

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

关注

评论

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

使用Spring Boot创建docker image

程序那些事

Docker spring Spring Boot Spring Boot 2

系统架构--作业

Nick~毓

Java之父都需要的一本能够更深入地了解Java编程语言的书

Java架构之路

Java 程序员 面试 编程语言

阿里大牛精心整理了46张PPT,教你弄懂JVM、GC算法和性能调优

Java架构之路

Java 程序员 面试 编程语言 JVM

架构师训练营第四周学习笔记

一马行千里

学习 极客大学架构师训练营

Flink周期性水位线分配器-6-3

小知识点

scala 大数据 flink

代表Java未来的ZGC深度剖析,牛逼!

AI乔治

Java 架构 ZGC JVM GC调优

让超宽带抵达产业互联网:UBBF上演智能联接全面落地

脑极体

架构师训练营第四周作业

脸不大

Apache Pulsar 社区周报:09-26 ~ 10-09

Apache Pulsar

大数据 开源 云原生 Apache Pulsar 消息中间件

一次线上JVM调优实践,FullGC40次/天到10天一次的优化过程

AI乔治

Java 编程 架构 JVM GC

异步excel导出组件设计和实现

Wayne Chu

Java 微服务 EasyExcel SpringCloud 服务治理

Java-技术专题-JDK8-HashMap的实现原理

洛神灬殇

怎么才算掌握了JDK中的线程池

AI乔治

Java 编程 架构 jdk 线程池

打通IO栈:一次编译服务器性能优化实战

AI乔治

Java 编程 架构 io 高性能

Netty源码解析 -- 客户端启动过程

binecy

Netty nio 源码阅读

图解面试题-二叉树的所有路径

9527

Java 面试 算法 LeetCode 二叉树

ClickHouse最佳实战之分布表写入流程分析

京东科技开发者

数据库

一次百万长连接压测 Nginx OOM 的问题排查分析

AI乔治

Java nginx 架构 服务端 高性能

12张图带你彻底理解分布式事务产生的场景和解决方案!!

冰河

分布式事务 2PC 可靠消息最终一致 TCC 最大努力通知

为什么学习总是停在开头两页?

Nydia

年轻代频繁ParNew GC,导致http服务rt飙高

AI乔治

Java 学习 架构 JVM GC

重大事故!IO问题引发线上20台机器同时崩溃

AI乔治

Java 架构 多线程 io 并发

一周信创舆情观察(9.28~10.11)

统小信uos

程序员黄金年龄25-28岁,我们30+的人该去哪儿?附华为案例;

Java架构师迁哥

芯片破壁者(十七):“硅谷市长”罗伯特•诺伊斯开启的产业法则

脑极体

架构师训练营第 1 期第四周课后练习题

Leo乐

极客大学架构师训练营

如何优雅的搞垮服务器,再优雅的救活

MySQL从删库到跑路

Linux 升级glibc 启动异常 无法进入系统 抢救模式

架构师训练营第四周命题作业

一马行千里

极客大学架构师训练营 命题作业

Pulsar 社区周报|09-19 ~ 09-25

Apache Pulsar

大数据 开源 Apache Pulsar 消息中间件

如何花“一点点小钱”突破华为云CCE服务的“防线”

华为云开发者联盟

容器 k8s

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