Java 执行大量长耗时接口,怎么使用单机处理

2023-06-09 20:33:44 +08:00
 layxy

目前使用的线程池,但是因为任务量太大,单机线程池和队列很快就满了,因为某些原因只能使用一台机器,有什么办法可以优化下

2722 次点击
所在节点    Java
31 条回复
cvbnt
2023-06-09 20:40:56 +08:00
加内存
zpf124
2023-06-09 20:55:49 +08:00
处理速度跟不上只能增加性能,要么加内存要么加机器。

治标的话,只为了不爆,那就改成把待执行队列存库,然后代码改成读取数据库,有数据就处理,弄成定时任务或者直接死循环。
chenqh
2023-06-09 20:58:54 +08:00
加线程数?
iceshiny
2023-06-09 21:01:49 +08:00
找瓶颈
thinkershare
2023-06-09 21:02:31 +08:00
CPU 密集任务你看加再多线程,加再多内存也没啥用。I/O 密集型,使用线程池就够了,反正 I/O 线程也不会被 CPU 调用,设个大点的数量就好了。你给的条件太有限,给不出你优化意见。
kaneg
2023-06-09 21:37:58 +08:00
如果是纯 IO 型的调用,可以上异步 IO ,不怎么消耗线程。

如果不想增加异步 IO 的复杂性的话,就直接上最新版 Java 的虚拟线程,几乎可以无限开线程。
yeqizhang
2023-06-09 22:00:36 +08:00
任务放在线程池队列里,为什么会爆?
hefish
2023-06-09 22:21:23 +08:00
请问如何在不加内存,不加 cpu 的情况,让电脑跑的快一些?
yazinnnn
2023-06-09 22:24:30 +08:00
执行接口指的是调用外部服务?
io 密集的话可以用 netty 之类的 nio 客户端或者升级 jdk 用 loom
cpu 密集的话没救
dqzcwxb
2023-06-09 22:34:30 +08:00
串行改并行,同步改异步
十字秘诀送给你
xiangyuecn
2023-06-09 22:37:59 +08:00
ThreadPoolExecutor 线程池处理机制:
1. 新任务进入核心线程执行(核心线程默认不回收)
2. 核心线程数据量满了,放到队列等待
3. 队列 TMD 也满了,开新线程处理,直到线程数量达到最大线程数(这种线程会回收)


我一直没明白,这玩意到底是哪里会用到这破逻辑,最大线程数有个卵用啊😂

按我的脑回路,应该是核心线程满了,就开新线程,直到最大线程数,最大线程满了就放队列等待
hhjswf
2023-06-09 23:29:01 +08:00
Java 项目耗时基本在 io 上,最大线程数量可以搞大一点
arloor
2023-06-10 00:50:23 +08:00
mq ,来积压在 mq 上,对于 kafka 是挤压在磁盘上
dreamlike
2023-06-10 01:08:53 +08:00
先做热点采集 jfr 打个火焰图看看
再分析下 perf 没数据不知道该怎么处理 也不清楚是什么样子的业务
如果是那种你依赖的服务响应非常慢 直接上 reactive 来做 io 所占的也就几个闭包的内存,然后善用 timeout 和 buffer 来做被压就好了

如果是依赖于 cpu 嗯算 那基本只能叠机器了 这种一般采集完信息会显示 cpu 占用平均值非常高
tairan2006
2023-06-10 08:11:45 +08:00
MQ 啊
RuralHunter
2023-06-10 10:37:43 +08:00
客户端提交任务后定时查询任务状态
服务端接到任务直接放队列,执行线程从队列取任务执行保存执行结果。同时相应客户端的查询状态请求
tangAtang
2023-06-10 11:27:09 +08:00
@xiangyuecn 这是历史问题,以前 CPU 可没这么多核心
hhjswf
2023-06-10 13:19:44 +08:00
@xiangyuecn 按你的脑回路最大线程数也没用啊,如果有源源不断的任务,你这最大线程数一直满载,我为什么直接加大核心数?
someonedeng
2023-06-10 15:39:28 +08:00
用带持久化的 mq
key0323
2023-06-10 16:40:20 +08:00
加个 kafka 自己发消息自己消费

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.fyfyfm.apispeedy.workers.dev/t/947423

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX