java - 启动@Async : what is best way to create 1000 no of threads using spring

标签 java spring multithreading spring-boot spring-async

我需要以多线程方式处理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/

相关文章:

java - Spring框架中的缓存线程池

java - ApiOriginFilter.java是如何生成的

c - 使用 C 中的缓冲区和多线程从文本文件读取

java - ScheduledExecutorService 固定费率的计划未按预期准确运行

java - 将 .txt 文件传输到数组时出错(线程异常)

java - 如何在鼠标退出事件一定毫秒数后取消选择 jList 中的项目

Java mousePress 无法正常工作

java - spring mvc 对 URL 参数进行加密和编码

python - 为列表中的项目生成一个新线程

java - 关于基于 Spring security URL 的安全性的说明