V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
javak
V2EX  ›  Java

曾经我以为 Java21 的虚拟线程是银弹...

  •  
  •   javak · 2023-12-14 13:38:38 +08:00 · 4018 次点击
    这是一个创建于 378 天前的主题,其中的信息可能已经有所发展或是发生改变。

    曾经我以为 Java21 的虚拟线程是银弹... 结果发现现实引力太重,根本飞不起来,要飞必须大量的库需要适配,比如把 synchronized 用的地方改掉。

    再比如,最基本的 MySQL 的 JDBC 就还没适配。 https://github.com/mysql/mysql-connector-j/pull/91

    路漫漫啊

    14 条回复    2024-05-06 09:49:29 +08:00
    tomatocici2333
        1
    tomatocici2333  
       2023-12-14 13:41:51 +08:00
    没有银弹
    idealhs
        2
    idealhs  
       2023-12-14 13:47:41 +08:00
    和异步一样,底层需要具有异步实现。不过虚拟线程从语法层面上看起来就和同步方法没有任何区别了,异步还有颜色函数和传染性。
    iPisces77
        3
    iPisces77  
       2023-12-14 14:05:55 +08:00
    单独是 mysql 自己驱动不支持罢了...
    pg,oracle 都支持了的
    yazinnnn0
        4
    yazinnnn0  
       2023-12-14 14:20:58 +08:00
    用 mariadb 的驱动
    fgwmlhdkkkw
        5
    fgwmlhdkkkw  
       2023-12-14 14:30:46 +08:00 via Android
    但是你真的可以建设它!
    Aresxue
        6
    Aresxue  
       2023-12-14 14:35:30 +08:00
    软件工程没有银弹。
    synchronized 是可以在后续被 JVM 优化掉的,而且实在不行替换成 ReentrantLock 的操作也还是比较简单的。ThreadLocal 才麻烦,不过 scoped value 成熟后应该也可以搞的定。
    就是现阶段替换虚拟线程的成本和收益不明显而已,但如果是一个长远规划的项目早做早好,小项目玩玩也可以。
    kenvix
        7
    kenvix  
       2023-12-14 14:44:31 +08:00
    未来仍可期,Loom 仍然还是一个很年轻的东西,而且这方面的优化在理论上也是可行的只是比较复杂,等下一个 LTS 的时候或许会好很多
    chendy
        8
    chendy  
       2023-12-14 15:05:08 +08:00
    其实吧,除非资源真的很紧张或者规模真的很大,这玩意约等于没用
    先蹲个三五年再说吧
    chirsgod
        9
    chirsgod  
       2023-12-15 10:46:57 +08:00
    上次就看知乎的一个人分析,等到 java25 结构化并发的东西加上周围配套组件都适配后,才是曙光到来。现在是黎明前最后的黑暗了。
    sam384sp4
        10
    sam384sp4  
       2023-12-15 11:55:37 +08:00
    上 c#把,异步生态很完善了
    dddys
        11
    dddys  
       2023-12-17 15:32:55 +08:00
    给 jdbc 提 pr
    codingmiao
        12
    codingmiao  
       2023-12-22 23:35:51 +08:00
    我这有个屎山代码,大致业务是处理 kafka 的数据,来一条数据就拉一个线程去处理,需要保证一致性的地方就在那 Thread.sleep 。。然后今年数据量翻了好几翻,所以,这屎山需要的线程数达到了四五千,我很想去重构它,但是堆积的业务太多根本改不动,还好虚拟线程来了,只要把起线程的地方改成起虚拟线程就好了。
    marding
        13
    marding  
       240 天前
    @codingmiao 效果怎么样
    codingmiao
        14
    codingmiao  
       235 天前
    @marding 挺好的,原来 16 核 CPU 直接拉满,改虚拟线程后 3 、4 个核的样子就能撑住。关键是改动量很少,升级到 21 ,换了几个太老的 maven 依赖,把线程换成虚拟线程就完事了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4693 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 87ms · UTC 05:37 · PVG 13:37 · LAX 21:37 · JFK 00:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.