java - 引导@Async:使用spring创建1000个线程的最佳方法是什么
问题描述
我需要以多线程方式处理 6 亿条记录,每个请求需要 5-6 秒。在启动应用程序中,我需要创建 1000 个线程,但 tomcat 仅支持 200 个。最好的方法是什么?
解决方案
您可以完全控制 Tomcat 在/apache-tomcat/conf/server.xml中创建的线程数:
<connector connectiontimeout="20000"
maxthreads="1000"
port="8080"
protocol="HTTP/1.1"
redirectport="8443" />
您可以在线程的操作系统限制范围内执行此操作。在mac上是2000。
但我认为创建 1000 个线程不会对您有太大帮助。松散地说,您只能执行与机器上的内核一样多的并发线程。
因此,使用 4 核机器处理 6 亿条记录需要大约 24 年的时间。使用 32 个内核,您可以将其降低到个位数的年数。
我会怎么做?我会研究像 Apache Beam 这样的东西,它可以在很多很多机器上并行化你的工作流程。看看https://cloud.google.com/dataflow/。您可以创建任务来申请 1000 台 4 核机器。谷歌会为你旋转它们并把它们拆掉。这项工作大约需要 9 天。信封背面计算表明,获得您的答案将花费您大约 8,640 美元
推荐阅读
- php - 在新选项卡上打开图像
- javascript - 如何通过按帐户/ID/类别分组来对值求和?
- javascript - 检查 JS 变量是否不超过一个值的最佳方法?
- linux - 如何使用 mmcli(ModemManager DBus 驱动的 Linux 守护程序 API)将 sim 号码列入白名单
- rotation - 用鼠标拖动、调整大小和旋转
- docker - 为什么我不能附加到 mariadb 的 docker 容器?
- postgresql - postgres 11:禁止缓存表
- python - ValueError:形状 (None, 1) 和 (None, 5) 不兼容
- java - 在 Java 中打印出带有时区的本地化日期
- php - PHP-Swoole 错误 accept() failed, Error: Too many open files[24]