我需要以多线程方式处理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 核机器大约需要 24 年才能处理 6 亿条记录。使用 32 个核心,您可以将其减少到个位数的年数。
我会做什么?我会研究像 Apache Beam 这样的东西,它可以在很多很多机器上并行化你的工作流程。看看https://cloud.google.com/dataflow/ 。您可以创建任务来申请 1000 台 4 核机器。谷歌会为你旋转它们并把它们拆掉。这项工作大约需要 9 天。粗略计算显示,获得答案将花费您约 8,640 美元
关于java - 启动@Async : what is best way to create 1000 no of threads using spring,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59427206/