【发布时间】:2019-01-16 12:18:10
【问题描述】:
我在 spring-boot 的基础上创建了一个简单的 Web 应用程序。它获取请求,执行一些块操作(例如写入从 1 到 10_000 的控制台编号)并返回简单的响应。
当我开始使用 JVisual VM 对其进行测试时,我注意到线程以一种奇怪的方式工作。
一开始,在低负载的情况下,它们不会同时工作,而是轮流工作:
如果我尝试高负载应用程序,则 Tomcat 会创建新线程(据我了解,这没关系),然后线程同时工作:
我使用Netling app 来测试应用程序。它只是对 localhost 的简单请求,没什么特别的。
你能解释一下为什么它以这种方式工作吗?或者提供一些带有描述的链接。
提前致谢!
【问题讨论】:
-
请求被排队,只要当前启动的线程数可以足够快地清空队列,就不会启动额外的线程。您的图像还显示,在这两种情况下,它们同时工作(参见线程 10、7 和 4
-
@M.Deinum。谢谢你的解释。你对第一个屏幕截图完全正确,这是我的错,但我之前在所有测试中都没有看到这种情况
-
@M.Deinum 另外,问题不在于队列和池大小。主要问题是为什么所有线程不能同时工作?
-
他们为什么要这样做?如果没有工作,他们为什么要这样做……而且并发运行的线程数受您拥有的内核数的限制。
标签: java spring multithreading spring-boot tomcat