java - 如果同时有很多请求,多线程是否会提高性能?

标签 java multithreading spring tomcat

我正在使用 Tomcat 7 上托管的 Spring 3 开发一个 Java Web 应用程序,它需要每秒处理超过 2.5k 个请求。我有一个 RequestProcesseor 类,使用此方法处理每个 HTTP 请求:

@Service
public class RequestProcesseor {

    public void processSomething(int value1, int value2) {
        // process something...
        // create and deep copy some object
        // some BigDecimal calculations
        // maybe some webservice calls
    }

}

同时有超过2.5k个请求,会调用processSomething方法。如果我让这个类多线程。 它会提高性能吗?如果是,为什么?我该如何证明?

服务器有一个 4 核 CPU。

最佳答案

即使您没有显式地执行任何多线程,您的应用程序服务器也会隐式地将每个请求分派(dispatch)到它自己的线程,因此您已经在 CPU 上有并发负载。

只有在您的请求处理受 CPU 限制时,并发代码才能为您提供帮助,这种情况很少见。通常瓶颈是数据库,或者更一般地说,是与其他后端子系统的接口(interface)。

如果每个请求都是通过处理大量内存数据来处理的,并且如果每秒请求负载很低,那么它可以带来返回小心地将工作分配给 几个 线程,不要超过实际的 CPU 核心数。

因此,由于您的服务器负载非常重,几乎可以肯定不可能通过将工作分派(dispatch)给多个线程来提高其性能。请注意,多线程很容易破坏性能。

关于java - 如果同时有很多请求,多线程是否会提高性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17489993/

相关文章:

java - Spring MVC 应用程序中的性能

java - 关闭 Kafka 消费者

Java + Android Jetpack + Dagger 2 在 ViewModel 中注入(inject)

java - 使用 synchronizedSet 同步两个线程之间的访问

java - 我可以强制控制台将价格和小费保持在同一条线上吗?

c++ - 处理消息太慢,导致 UI 不稳定、无响应 - 如何使用多线程来缓解这种情况?

java - com.amazonaws.AmazonClientException : Unable to complete transfer: Connection pool shut down

java - 避免隐式急切加载集合 stub ?

Python 池 生成池

c++ - C++中的$符号