#《深入理解Java虚拟机》介绍协程(coroutine)章节读后感#
- 首先是软件在多线程模型的实现总类:内核级别的线程(KLT),这是操作系统支持,CPU调度的基本单位;用户线程(UT),这是在进程之上,由语言自己模拟操作系统调度的一种轻量级实现,它避免了在用户态和内核态的转化(CPU中断导致的损耗);还有就是混合实现,也就是在内核线程上映射了多个用户线程,用户线程可以使用操作系统提供的内科线程调度器,实现较用户线程更简单,效率较内科线程更高效。Java在早期选择了用户线程,后期改为了内核线程,现在微服务的场景下,内核线程的并发数量和效率已经不能满足需求,所以Java计划了Loom这个项目。
- 一直在思考,Akka的actor模型是使用类似Java的线程调度器,默认是Fork/Join,那么akka应该是混合模型,应该还是会服从Java中的映射的内核线程的调度,但是同时Actor的消息也会由Dispatch调度器传递线程池执行。
- 书里提了Loom的Fiber代码执行分为两部分—执行过程和调度器。调度器默认也是Fork/Join,其底层也是java线程,那么也应该是混合模式,可能是Akka的actor模型可以简化这两个部分的实现,这么看来Akka也算是JVM上面的一个类coroutine实现。