HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

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

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

关注

评论

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

列存引擎 Tianmu 如何实现 Delete?| StoneDB 研发分享 #3

StoneDB

MySQL HTAP 数据库· StoneDB 12 月 PK 榜

阿里P8裸辞真实心路历程,他底气来源于Java高阶面试合集

收到请回复

Java 程序员 面试 编程语言

成果版本支持追溯,代码来源有迹可循|ModelWhale 版本更新

ModelWhale

人工智能 机器学习 数据分析 团队协同 编程建模

一块RTX 3090加速训练YOLOv5s,时间减少11个小时,速度提升20%

OneFlow

人工智能 深度学习 模型训练

从源码到架构实战,Spring Boot+Spring Cloud微服务开发笔记全分享

小小怪下士

Java spring 微服务 springboot SpringCloud

龙蜥社区高性能存储技术 SIG 11 月运营回顾 | 龙蜥 SIG

OpenAnolis小助手

开源 高性能 存储 龙蜥社区 sig

cleanmymac2023体验版功能讲解

茶色酒

CleanMyMac CleanMyMac X2023

【Meetup 明天见】OpenMLDB + MaxCompute:集成打通云上生态,高效构建 AI 应用

第四范式开发者社区

人工智能 机器学习 数据库 开源 特征

手把手搭建视频查重系统

Zilliz

Milvus Towhee

我凭借这1000道java真题,顺利拿下京东、饿了么、阿里大厂offer

钟奕礼

Java 程序员 java面试 java编程

CodeArts如何保证客户代码和应用安全?

科技怪授

华为云

前端工程师leetcode算法面试必备-二分搜索算法(中)

js2030code

JavaScript LeetCode

什么是CodeArts?

科技怪授

华为云

鸿蒙开发实例|对象关系映射数据库

TiAmo

华为 华为云 12月月更

活动预告 | 2022 中国开源开发者(北京)峰会

第四范式开发者社区

人工智能 机器学习 数据库 特征

《程序员修炼手册》,这521道阿里Java面试真题!真的不来看看?

钟奕礼

Java 程序员 java面试 java编程

Redis 为什么这么快,你知道 I/O 多路复用吗?

C++后台开发

redis 多线程 后端开发 C++开发 I/O 多路复用

Redis的数据被删除,占用内存咋还那么大?

码哥字节

redis 数据 内存

CleanMyMac试用版4.12.1下载教程

茶色酒

CleanMyMac X CleanMyMac X2023

前端工程师leetcode算法面试必备-二分搜索算法(下)

js2030code

JavaScript LeetCode

CleanMyMacX2023免费版Mac清理软件

茶色酒

CleanMyMacX

美团四面Java岗,终获offer,我是这么回答面试官的

钟奕礼

Java 程序员 java面试 java编程

【MyBatis】mybatis中#{}与${}的区别

No8g攻城狮

MySQL mybatis sql

OpenMLDB 社区月报 | 2022年11月

第四范式开发者社区

人工智能 机器学习 数据库 开源 特征

黄金三月,跳槽旺季稳拿40k月薪,java资料免费送

钟奕礼

Java 程序员 java面试 java编程

用javascript分类刷leetcode3.动态规划(图文视频讲解)

js2030code

JavaScript LeetCode

数据库挖矿系列-优化器设计探索穿越之旅

阿里技术

数据库

政企数智办公潮水里的融云「答卷」

融云 RongCloud

办公 数智化

这400道面试题,决定了你去BAT还是TMD

钟奕礼

Java 程序员 java面试 java编程

2022鸿蒙开发者大赛应用创新赛道收官,中国赛区21个优秀作品获奖

Geek_2d6073

Apache APISIX 玩转 Tongsuo 国密插件

API7.ai 技术团队

加密 api 网关 Apache APISIX

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