我有几个关于并发架构和性能的问题。
有一个 JavaFX GUI,用户可以在其中启动各种任务,这些任务本身就是线程任务 ( new Thread(new CustomTask<?>).start();)。这些任务对大约 700k 个 HTTP 请求执行一个循环,并在为数据库准备的插入语句中有大约 10k 个项目时插入处理后的返回值。他们的进度显示在 GUI ( ObservableListitems) 中。

这些任务需要很长时间,瓶颈似乎是等待 HTTP 响应时的延迟。(数据库插入是在大量 10k 准备好的插入语句中关闭自动提交的情况下完成的)
通过将请求放在单独的任务/线程中来提高整体性能。
在这里使用线程是否合理?如何以其他方式提高性能?
如果线程是合理的,我如何实现它?我正在考虑拥有一个全局线程池或ExecutorService请求任务排队的地方。当响应可用时,它将被写入同步列表。如果列表中有 10k+ 个对象,则执行批量插入。
如何确定一个好的线程池大小?如何区分线程?
Thread.activeCount() 返回 7(当前线程组)
ManagementFactory.getThreadMXBean().getThreadCount() 返回 13(线程总数?)
Runtime.getRuntime().availableProcessors() 返回 8
我读过一些关于多线程的评论,他们都说线程数多于内核数并不一定能提高性能(没有“真正的”并发,时间切片)。我不知道,但如果我不得不猜测,我会说数字 13 包含一些 GUI 线程。我似乎无法理解如何获得 ThreadPoolSize 的有用数字。
我很感激有关如何改进我的应用程序的任何提示。