我说一下我目前的数据:
线程数下降 1200+ 内存下降:5pt CPU 下降:10pt
感觉并没有 N 倍提升,是不是因为我的应用本身就是大部分都是 异步代码的 原因?
![]() | 1 wbd31 2024-02-01 22:15:17 +08:00 pt 是什么单位? |
3 IceTech 2024-02-01 22:18:13 +08:00 via Android 可能是在说 percent? |
![]() | 4 ikas 2024-02-01 22:27:18 +08:00 虚拟线程最大优势不就是使用传统编程模式实现异步一样的效率么? |
![]() | 5 cabing 2024-02-01 22:29:44 +08:00 你的版本升级好快了啊。好多项目都是 java8java15 都没有 |
![]() | 6 hepin1989 OP @ikas 我觉得并没有,日常还是写 Flux/Pekko Stream 快一点,而且我在 ConcurrentHashMap 上遇到了 pin Carrier thread 。无解,如果改成全异步的 cache ,反而 CPU 的收益只有 5 个百分点了。 |
7 lmshl https://imgur.com/a/ZyMpzTR 在用了在用了,我现在就写 vt |
![]() | 8 300 2024-02-01 22:49:04 +08:00 via Android ![]() 第一次见到百分比用 pt 表示…这是缩写还是扩写了% |
9 kkwa56188 2024-02-01 23:13:10 +08:00 If it ain't broke, don't fix it. 如果是生产环境: 非必要不更新, 非必要不升级, 非必要不用新 feature. 跑的好好的东西, 能不动就不动, 一个小版本号都不动. 如果自己折腾, 那随意. |
![]() | 10 BBCCBB 2024-02-01 23:19:11 +08:00 你本来就是异步代码, 提升空间不大. 而且 jdk21 还没 ScopedValue, 不完善. |
![]() | 11 ikas 2024-02-01 23:19:22 +08:00 锁的问题需要库,框架适配 毕竟虚拟线程 21 才正式发布,锁与 ThreadLocal 是上生产的最大阻碍 我们基础框架已经升级到了 21,几个项目陆续也升级了,但是虚拟线程只在一个新项目测试版本中开启.. |
12 ByteCat 2024-02-01 23:19:33 +08:00 项目都用 Kotlin 写的……换到 Java21 有用吗 |
![]() | 13 gongxuanzhang 2024-02-02 00:35:14 +08:00 我觉得线程池换成虚拟线程性能优化是 0 如果你是 new 出来的线程倒是能优化.. |
![]() | 16 G2bN4dbX9J3ncp0r 2024-02-02 01:18:36 +08:00 @kkwa56188 总有一天没法维护 |
![]() | 17 hepin1989 OP @lidashuang 改动很小的,不超过 30 行代码老师。 |
![]() | 18 tramm 2024-02-02 08:24:48 +08:00 21 都没升呢 |
![]() | 19 echo1937 2024-02-02 08:32:42 +08:00 @gongxuanzhang 结构化并发实装前,确实少些个意思。即便如此,虚拟线程比线程池灵活,而且即使是线程池,也有 corePoolSize/maximumPoolSize 等问题,该 new 的时候还会 new ,总之还是乐见于多一种方式的。 |
21 dbpe 2024-02-02 08:46:45 +08:00 ![]() Java 的虚拟线程。。。emmm 。。。哎。。。 什么时候可以像 kt 一样。。await 直接用。。 |
![]() | 22 BeiChuanAlex 2024-02-02 08:54:56 +08:00 协程? 现在还在用 jdk 8 的路过~~~~~~~~~~~ |
![]() | 24 Dragonphy 2024-02-02 09:03:07 +08:00 Java 21 虚拟线程的陷阱:我们在 TPC-C for PostgreSQL 中遭遇死锁 https://mp.weixin.qq.com/s/BfDd08j2jQwIOSaxf_mgww |
25 zed1018 2024-02-02 09:14:07 +08:00 ![]() @kkwa56188 请问不升级等到 CVE 高风险漏洞的时候一下升炸十天半个月都 migrate 不完怎么办。怎么老是有这种思想,breaking changes 应该是早发现早治疗,一定要等债务大到爆炸才解决,是想着反正我就干一两年,相信后人的智慧吗? |
![]() | 26 cloudyplain 2024-02-02 09:21:18 +08:00 个人感觉:虚拟线程最大好处是对编程友好(特别是异步,不借助语法糖实现 await),性能方面:对异步(netty 、vert.x)甚至可能下降,同步也不见得有多少显著提升(一般是业务代码占大头,helloworld 除外) |
27 yooomu 2024-02-02 09:27:41 +08:00 在一个数据迁移的项目下试用了一下,高度 IO 密集型,使用传统线程池并发根本上不去,CPU 占用过山车。换用虚拟线程,CPU 稳定吃满,迁移效率大幅提升 |
![]() | 28 Goooooos 2024-02-02 09:29:00 +08:00 percent 缩写一般是 pct ,建议别乱缩写,用%谁都看得懂 |
![]() | 30 ychost 2024-02-02 09:34:39 +08:00 虚拟线程对异步本来就没有提升,可能还会下降,对同步代码提升很大 |
31 jjianwen68 2024-02-02 09:49:21 +08:00 原本多线程的程序,话说要怎么用虚拟线程,在每个线程耗时处理的地方再开虚拟现场处理,进一步提升效率吗 |
32 liouop 2024-02-02 10:22:40 +08:00 目前项目还在 jdk11 kotlin1.9 。。想知道大家的虚拟线程的使用场景都是用来做什么 并发请求数据、数据库 or 计算处理? |
![]() | 33 wocanmei 2024-02-02 10:41:35 +08:00 感觉内存和 cpu 优化不明显,用处不大吧 |
![]() | 34 wanguorui123 2024-02-02 10:47:30 +08:00 大部分情况下瓶颈在数据库 |
![]() | 35 yidinghe 2024-02-02 10:48:53 +08:00 虚拟线程的好处,一是降低操作系统负担,方便虚拟机自行根据硬件资源调整;二是因为减少了异步代码,可以更方便的使用 ThreadLocal 等工具。总之,它在设计编码方面带来的负担降低是非常显著的。 |
36 zhady009 2024-02-02 12:07:59 +08:00 via iPhone 虚拟线程不会让你的代码变快而且还会变慢些,主要还是能提供吞吐量 CPU 利用率,而且代码风格不用变还是同步的写法 |
37 UNCLOSABLE 2024-02-02 16:12:43 +08:00 @yooomu 哦?能不能描述以下实现方案啊,感觉很有用啊 |
38 yooomu 2024-02-02 17:02:25 +08:00 @UNCLOSABLE 就是把原来的使用传统线程池的地方换成调用 Executors.newVirtualThreadPerTaskExecutor()使用虚拟线程执行任务,然后使用 Semaphore 来控制并发量,使用起来和传统线程没多大区别。因为需要从另一个服务器拉数据,一开始没控制并发量,直接把那台服务器干崩了,可见虚拟线程还是挺猛的 |
![]() | 41 BeautifulSoap 2024-02-02 17:27:33 +08:00 公司目前所有项目推荐的版本依旧还只是 17 LTS ,估计还要过段时间才迁移到 21 LTS |
![]() | 42 Paracosm 2024-02-02 17:27:38 +08:00 如果原先就是做异步处理的话,感觉提升相差无几 |
![]() | 43 silentsky 2024-02-02 18:10:07 +08:00 via Android 至少还是有提升的嘛 |
![]() | 44 linvaux 2024-02-02 18:24:29 +08:00 你发任你发,我用 java8 |
![]() | 46 SpaceDementia 2024-02-02 18:27:48 +08:00 Java 21 虚拟线程适合执行 IO 密集型任务,优势在于提高应用吞吐量 |
47 yef 2024-02-03 01:01:32 +08:00 Java8 ,生产非必要不升级,没人主导,没人审批,没法汇报 |
![]() | 48 09an6YfX8rNvIG92 2024-02-03 12:24:37 +08:00 只有 io 密集型任务,并发量非常大,并且原来的代码会阻塞线程的时候,虚拟线程的效果才会比较明显。但现实中,这种情况已经有了其它的解决方式,就是开发上很麻烦 |
![]() | 49 siweipancc 2024-02-03 23:53:25 +08:00 via iPhone io 并发的效率高,但是内存吃的哗哗的,最重要的结构化并发还没落地,使用场景有限 |
52 pcdd 2024-04-02 00:03:47 +08:00 用了爬虫速度变快了,内存占用也减小不少,代码行数也省了,很香 分代 zgc 开启了吗?使用虚拟线程时,必须使用分代 zgc ,否则 gc 压力比过去大很多 我最开始没开,反而变慢了,开了后就快了 |