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

Dro*_*gba 4 java spring multithreading 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
    }

}
Run Code Online (Sandbox Code Playgroud)

同时有超过2.5k的请求,并将调用processSomething方法.如果我让这个课程多线程.它会改善性能吗?如果是,为什么?我该如何证明呢?

服务器有一个4核CPU.

Mar*_*nik 7

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

如果您的请求处理受CPU限制,并发代码将仅对您有所帮助,这种情况很少发生.通常,瓶颈是数据库,或者更一般地说,是与其他后端子系统的接口.

如果通过处理大量内存数据来处理每个请求,并且如果每秒请求负载较低,可以在几个线程之间小心划分工作,而不是超过实际的CPU核心数.

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


Uwe*_*nus 5

请注意,Tomcat已经在进行多线程处理.

在应用程序服务器或Web容器内自行执行多线程并不总是明智的.

应用程序服务器或Web容器已在请求上执行多线程处理.

请阅读Tomcat的文档和/或源代码.