- 声明:本文并非原创,但是原文排版和语言逻辑有明显的问题,因此就对原文进行一个梳理,并加以补充,来帮助理解。
- 原文链接:CSDN_一个http请求就是一个线程吗,java的服务是每收到一个请求就新开一个线程来处理吗
问题一:一个http请求就是一个线程吗?
答案:是,一个http请求,就是一个线程。
问题二:Java的服务是每收到一个请求就新开一个线程来处理吗?
答案:不一定,下面的图片解释为什么答案是不一定。图片摘自:tomcat连接数线程数、java的服务是每收到一个请求就新开一个线程来处理吗?tomcat呢?
关于“单线程”与“多线程”可以这样形象地比喻:
tomcat,是银行;一个线程,就是一个来银行办理业务的用户,每个线程带着一个http请求。线程是共享cpu的。
那么多线程和单线程相比,能提升处理速度吗?(备注:一个CPU可以包含一个或两个内核,一个内核又可以有一个或两个线程)
好比,一个窗口,三个人来办理业务。单线程:一个办完,下一个再开始办。多线程:大家轮流着办,一会给A办,一会儿给B办。
就一个窗口而言,单线程,多线程,耗时差别并不大,并没有明显提升效率。
那么为什么还说多线程比单线程效率高呢?
总结:
1. 一个http请求是一个线程吗?
可以这样来说:一个请求,就对应了一个线程。
2. Java的服务每收到一个请求就新开一个线程来处理吗?
受到tomcat启动的“最大线程数”和“接受排队请求个数”的制约。当已经开启的线程数目小于“最大线程数”时,自然是来一个请求,就会开启一个线程来处理这个请求。但是一旦超过了最大线程数,而又小于允许排队个数,就可以在那排着队,等待着前面的请求执行完了,空出来线程再分配给这些处于等待状态的请求。而如果处于等待的http请求已经等于了允许等待个数,便会直接拒绝此次请求。