Kilim

基于角色的消息传递框架
授权协议 MIT
开发语言 Java
所属分类 程序开发、 并发/并行处理框架
软件类型 开源软件
地区 不详
投 递 者 林英朗
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

Kilim 是一种 Java 消息传递框架,提供了超轻量级的线程,推动了线程之间迅速、安全、无需复制的消息传递的实现。

Kilim 使用 Java 编写,融入了角色模型的概念。在 Kilim 中,“角色” 是使用 Kilim 的 Task 类型来表示的。Task 是轻量型的线程,它们通过 Kilim 的 Mailbox 类型与其他 Task 通信。

Mailbox 可以接受任何类型的 “消息”。例如,Mailbox 类型接受 java.lang.ObjectTask 可以发送 String 消息或者甚至自定义的消息类型,这完全取决于您自己。

在 Kilim 中,所有实体都通过方法签名捆绑在一起,如果您需要同时执行几项操作,可以在一个方法中指定该行为,扩大该方法的签名以抛出 Pausable。因此,在 Kilim 中创建并发类就像在 Java 中实现 Runnable 或扩展 Thread 一样简单。只是使用 RunnableThread 的附加实体(比如关键字 synchronized)更少了。

最后,Kilim 的魔力是由一个称为 weaver 的后期进程来实现的,该进程转换类的字节码。包含 Pausable throws 字句的方法在运行时由一个调度程序处理,该调度程序包含在 Kilim 库中。该调度程序处理有限数量的内核线程。可以利用此工具来处理更多的轻量型线程,这可以最大限度地提高上下文切换和启动的速度。每个线程的堆栈都是自动 管理的。

在本质上,Kilim 使创建并发进程变得轻松而简单:只需从 Kilim 的 Task 类型进行扩展并实现 execute 方法。编译新创建的支持并发性的类之后,对其运行 Kilim 的 weaver,您会实现显著的性能提升!

Kilim 最初是一种外来语言,但它带来了巨大的回报。角色模型(以及后来的 Kilim)使编写依赖于类似对象的异步操作对象变得更加简单和安全。您可以 使用 Java 的基本线程模型进行同样的操作(比如扩展 Thread),但这更具挑战性,因为它会将您带回锁和同步的世界中。简而言之,将 您的并发编程模型转换为角色使多线程应用程序更容易编码。

  • 本文系外部转帖。主要概述kilim是一种角色模型以及具体的实战demo。 中文地址:https://www.ibm.com/developerworks/cn/java/j-javadev2-7.html 英文原文地址:https://www.ibm.com/developerworks/library/j-javadev2-7/j-javadev2-7-pdf.pdf demo 实现地址:htt

  • kilim http://rdc.taobao.com/team/jm/archives/533 http://www.ibm.com/developerworks/cn/java/j-javadev2-7.html   What is Kilim? Kilim is a message-passing framework for Java that provides ultra-lightwei

  • 概括的讲,​Kilim框架在实现这个语义特性时,干了以下几个事情: 利用字节码技术(基于ASM字节码框架),将普通代码转化为支持协程的代码; 调用P auseable方法 的时候,如果暂停了就保存当前方法栈的State,暂停 执行 当前Task,将控制权交给Scheduler调度器; Scheduler调度器负责协调其他就绪的Task; 之前暂停的 Task恢复 的时候,自动恢复State,恢复到

  • 简介 Github地址 kilim 1.0:https://github.com/kilim/kilim  kilim 2.0:https://github.com/nqzero/kilim  特性 1.Kilim是一个Java消息传递框架,它提供了超轻量级的线程和工具,可以在这些线程之间进行快速、安全、零复制的消息传递。 2.Kilim的核心在于Mailbox跨线程共享内存,没有锁或同步,Mai

  • 转载http://blog.csdn.net/chenyi8888/article/details/7046652 对于软件开发人员而言,调试多线程应用程序中的非确定缺陷是最痛苦的工作。因此,像大多数人一样,我钟爱使用 Erlang 和 Scala 等函数语言进行并发编程。 Scala 和 Erlang 都采用了角色模型来进行并发编程,没有采用线程概念。围绕角色模型的创新并不仅限于语言本身,角色模

  • 除了Akka以外,另外一个将类似Erlang和Scala的Actor的并发模型引入Java的开源框架:kilim/kilim - GitHub,其使用了一种mailbox跨线程共享内存,没有锁或同步。 消息消费者代码如下,监听mailbox: public class Calculator extends Task{ private Mailbox mailbox; public Calculat

  • 试用了一下 http://docs.paralleluniverse.co/quasar/,发现它是基于JDK 1.7的(主要是fork join pool)。于是拿kilim的代码改了一个纯协程的版本出来。kilim的原始版本(https://github.com/kilim/kilim)里所有的Task都与一个Scheduler绑定,而且官方的例子里都是讲怎么使用Mailbox做messagi

  • 本文主要介绍kilim的相关资源以及以Hello world为例,介绍kilim如何编译运行。 下载源码 kilim 1.0:https://github.com/kilim/kilim kilim 2.0:https://github.com/nqzero/kilim 工程里包含了基础的运行方式、源码、例子以及相关文档等资源。如果在使用中遇到什么问题或者bug,都可以给作者提issue,让kil

  • 存档日期:2019年5月13日 | 首次发布:2010年4月13日 并发编程是Java™Development 2.0的核心,但可能不是基于线程的并发。 安德鲁·格洛弗(Andrew Glover)解释了为何参与者在多核系统中的并发编程中胜过线程。 然后,他介绍了Kilim,这是一个基于actor的消息传递框架,将并行编程和分布式编程结合在一起。 此内容不再被更新或维护。 全文以PDF格式“按原样

  •     我最近在实现一个基于Kilim的HttpClient,在处理响应body特别大的情形下遇到了kilim的一个BUG,有必要记录下。     问题是这样,Kilim将连接封装为EndPoint对象,EndPoint有个方法fill用于从管道读数据到缓冲区,并且可以指定希望至少读到多少个字节(atLeastN)才返回。那么在进入此方法的时候会判断缓冲区是否有足够空间容纳atLeastN个字节,

  • 最近了解了一下基于协程来做异步话的场景。一些基本概念写在这里。       ​    ​多任务调度方面,操作系统怎么搞的?         一种是抢占式,指操系统给每个任务一定的执行时间片,在到达这个时间片后,如果任务仍然没有释放对CPU的占用,则操作系统强制释放,这是目前多数操作系统实现的方式。         一种是协作式,指操作系统按照任务的顺序来分配CPU,每个任务执行过程中除非主动释放,

  • http://phl.iteye.com/blog/2247112 http://chen-tao.github.io/2015/10/02/kilim-work-way/ 待丰富 转载于:https://www.cnblogs.com/lijiale/p/9999860.html

 相关资料
  • 由于内容脚本在网页而不是扩展程序的上下文中运行,因此它们通常需要某种与扩展程序其余部分进行通信的方式。例如,RSS 阅读器扩展程序可以使用内容脚本来检测页面上 RSS 摘要的存在,然后通知后台页面以显示该页面的操作图标。 扩展及其内容脚本之间的通信使用消息传递来实现。任何一方都可以监听从另一端发送的消息,并在同一通道上进行响应。消息可以包含任何有效的 JSON 对象(空,布尔值,数字,字符串,数组

  • ms tcp nodelay 描述: 在信差的 TCP 会话上禁用 nagle 算法。 类型: Boolean 是否必需: No 默认值: true ms initial backoff 描述: 出错时重连的初始等待时间。 类型: Double 是否必需: No 默认值: .2 ms max backoff 描述: 出错重连时等待的最大时间。 类型: Double 是否必需: No 默认值: 15

  • 消息传递 目录 一次简单的请求 h3Name 长时间保持连接 h3Name 扩展之间的消息传递 h3Name 安全策略 h3Name 范例 h3Name API reference Properties propertyName Methods methodName Events eventName Types id For information on how to use experiment

  • 我正在尝试使用buckecord/Bukkit插件消息通道来接收关于玩家的数据(特别是他们在哪个聊天通道),首先从buk kit发送一个插件消息- 我在这里使用了教程,但服务器只是崩溃了,因为当从Bungee服务器接收到插件消息时,不会触发,所以不会触发。 以下是请求信息的代码: 下面是收到的插件消息的代码: 如果有一种方法可以做到这一点,而不需要等待服务器的其余部分(插件的其余部分可以在等待响应

  • 我想使用谷歌的Firebase为网络构建一个消息应用程序。在这个应用程序中,用户应该向/从其他用户发送和接收消息。我检查了谷歌的Firebase网站,但我迷路了。你能告诉我从哪里开始吗?你能给我看任何与Firebase网络消息相关的教程或类似的东西吗?我欢迎任何建议。谢谢。

  • 我很好奇节俭是否适合我的用例?我正在制作另一个消息传递系统,其中有一个客户端和服务器,但客户端和服务器都会向另一个发送请求消息,并且并非所有消息都是请求,只是通知。 回到10年前,我用基于二进制的手卷编解码器做到了这一点。回到5年前,我使用Google协议缓冲区再次做到了这一点。但我现在听到了更多关于Thrift的信息。 Thrift可以简单地用作编解码器吗,还是它真的是围绕请求/回复模式构建的?

  • 本文展示了如何根据不同的用户角色,在登录之后来重定向到不同的页面。 在 method-security项目的基础上,我们构建了一个role-base-login项目。 build.gradle 修改 build.gradle 文件,让我们的role-base-login项目成为一个新的项目。 修改内容也比较简单,修改项目名称及版本即可。 jar { baseName = 'role-bas

  • 新服务器密钥是否仅限于消息传递? 说明:在firebase项目设置中,我可以获得“旧”和新服务器密钥(云消息选项卡)。旧版本无法通过发送推送通知https://fcm.googleapis.com/fcm/send 因为响应说它是一个遗留服务器密钥。但在这里,它可以被限制在某些谷歌API中https://console.developers.google.com/apis. 谷歌API控制台中没有