我正在使用 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/