首页 > 解决方案 > 引导@Async:使用spring创建1000个线程的最佳方法是什么

问题描述

我需要以多线程方式处理 6 亿条记录,每个请求需要 5-6 秒。在启动应用程序中,我需要创建 1000 个线程,但 tomcat 仅支持 200 个。最好的方法是什么?

标签: javaspringmultithreadingspring-bootspring-async

解决方案


您可以完全控制 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 美元


推荐阅读