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

328 天前
 layxy

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

2479 次点击
所在节点    Java
31 条回复
cvbnt
328 天前
加内存
zpf124
328 天前
处理速度跟不上只能增加性能,要么加内存要么加机器。

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

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


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

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

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

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

https://www.v2ex.com/t/947423

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

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

© 2021 V2EX