Warning: Undefined global variable $debug in /var/www/ourcoders/tiny4cocoa/application/controllers/baseController.php on line 124
zhh-4096 2019-12-29 17:07:50 发布的技术动态 - OurCoders (我们程序员)
zhh-4096
2019-12-29 17:07:50 发布
Java 社区的 Project Loom 搞了几年,一直在踩坑一样,现在切换到lightweight thread 的路子上了 网页链接 (是不是又有点 Java 1.0 时代green thread 的味道?)

Java 社区的协程解决方案我从10年前就开始关注了,直到 Quasar GitHub - puniverse/quasar: Fibers, Channels and Actors for the JVM 稍微有点进展,但是依然难用,再到 Kotlin 的协程,虽然已经能用于生产环境,但是这个方案也只适合新的 Kotlin 应用,而且也只是在编译层面解决问题,对 Java 社区现有的大量代码没有用处。

所以我对于 Quasar 和 Kotlin 的协程都是不感冒的,还是希望在 JVM 层做一些实质性的改进,也就是 lightweight thread 的方向。java.lang.Thread 本身就已经对线程做了很好的抽象,只要在 JVM 层面不要跟 OSThread 一对一的绑定就是一个切入点,然后还需要处理很多原来需要同步的地方,比如把锁也变成轻量级的锁,避免对OS的系统调用。我在数据库里实现轻量级的行(列)锁也是类似这种原理。

在 JVM 层面实现 lightweight thread 我预估的难度主要有两个: 1. 新的调度器;2. JVM和标准库有太多同步的地方了,如何把原先的重量级锁(通常涉及OS的系统调用)变成轻量级锁。

传统数据库的问题也几乎一样: 重量级线程 + 重量级锁,我的工作也是加入新的调度器,然后把锁变轻量。都是一个很复杂繁琐的工程问题。