BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

Kilim:actor模型和消息传递的Java实现

| 作者 Niclas Nilsson 关注 0 他的粉丝 ,译者 韩锴 关注 0 他的粉丝 发布于 2008年7月4日. 估计阅读时间: 3 分钟 | ArchSummit北京2018 共同探讨机器学习、信息安全、微服务治理的关键点

正像在“多核危机: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

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT