Kilim框架的简单学习

本文介绍了Kilim框架的工作原理,重点解析了如何利用字节码技术将普通代码转换为支持协程的代码。在Kilim中,通过在编译期和运行期的操作,实现了协程的暂停、恢复以及调度。文章详细阐述了四种状态转换,包括正常返回、带有状态的返回以及两种暂停状态,并解释了协程执行过程中任务的暂停与恢复机制。
摘要由CSDN通过智能技术生成

Kilim框架

Kilim 框架在实现这个语义特性时干了以下几个事情:

  • 利用字节码技术,将普通代码转换为支持协程的代码
  • 调用Pasueable方法的时候,如果暂停了就保存当前方法栈的State,暂停执行当前Task,将控制权交给Scheduler调度器
  • Scheduler 调度器负责协调其他就绪的Task
  • 之前暂停的Task恢复的时候,自动恢复State,恢复到上次执行的位置继续执行

其中第一点是在编译期实现,其他点是在运行期实现

 

Kilim的工作原理

第一个Kilim最神奇的地方在于字节码增加,那么它是怎么样将普通的Java代码改写成支持协程的代码;

这也是Kilim实现协程的精髓所在。

左边是普通的java函数代码,与我们常见的函数唯一有所不同的是函数a和b均显示声明抛出Pausable异常,而实际上这个异常在运行期间不会抛出,他的实际作用类似于竹注解,使得Kimil能够识别哪些代码需要Weaver工具进行代码增强。函数抛出Pasuable异常即表明该函数是可暂停的。

右边的代码即通过字节码增强后的代码,与左边的原始代码相比,首先函数声明中增加了一个Fiber参数,Fiber可以理解为当前纤维

程/协程的上下文。Fiber中存储着协程暂停和恢复时需要用到的函数堆栈。程序计数器以及当前函数的执行状态。字节码增强后的代码以调用Pasuable方法a为分界,将整

Kilim 是一种 Java 消息传递框架,提供了超轻量级的线程,推动了线程之间迅速、安全、无需复制的消息传递的实现。 Kilim 使用 Java 编写,融入了角色模型的概念。在 Kilim 中,“角色” 是使用 Kilim 的 Task 类型来表示的。Task 是轻量型的线程,它们通过 Kilim 的 Mailbox 类型与其他 Task 通信。 Mailbox 可以接受任何类型的 “消息”。例如,Mailbox 类型接受 java.lang.Object。Task 可以发送 String 消息或者甚至自定义的消息类型,这完全取决于您自己。 在 Kilim 中,所有实体都通过方法签名捆绑在一起,如果您需要同时执行几项操作,可以在一个方法中指定该行为,扩大该方法的签名以抛出 Pausable。因此,在 Kilim 中创建并发类就像在 Java 中实现 Runnable 或扩展 Thread 一样简单。只是使用 Runnable 或 Thread 的附加实体(比如关键字 synchronized)更少了。 最后,Kilim 的魔力是由一个称为 weaver 的后期进程来实现的,该进程转换类的字节码。包含 Pausable throws 字句的方法在运行时由一个调度程序处理,该调度程序包含在 Kilim 库中。该调度程序处理有限数量的内核线程。可以利用此工具来处理更多的轻量型线程,这可以最大限度地提高上下文切换和启动的速度。每个线程的堆栈都是自动 管理的。 在本质上,Kilim 使创建并发进程变得轻松而简单:只需从 Kilim 的 Task 类型进行扩展并实现 execute 方法。编译新创建的支持并发性的类之后,对其运行 Kilim 的 weaver,您会实现显著的性能提升! Kilim 最初是一种外来语言,但它带来了巨大的回报。角色模型(以及后来的 Kilim)使编写依赖于类似对象的异步操作对象变得更加简单和安全。您可以 使用 Java 的基本线程模型进行同样的操作(比如扩展 Thread),但这更具挑战性,因为它会将您带回锁和同步的世界中。简而言之,将 您的并发编程模型转换为角色使多线程应用程序更容易编码。 标签:Kilim
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值