Tomcat理解Executor和Connector的关系

异步servlet和非阻塞Connector,一个是Executor,一个是Connector,两者的工作阶段不同。

一.Connector

指客户端请求服务器,好比春运通过12306购票,许多客户端连接到12306服务器,因此会有很多connection(连接),建立、维护、管理这些连接,这就是Connector要做的事情。显然这是web服务器性能的重要指标。即可支持的每秒最大连接数。

Connector主要支持BIO、NIO、NIO2、APR等

二.Servlet

一个Servelet,就是一个线程一次的执行过程。比如响应doPost(),这个是在一个独立的线程中完成的。

当Connector建立连接后,服务器会分配一个线程(可能是从线程池)去服务这个连接,即执行doPost等方法,执行完,回收线程。显然这一步是一个同步的过程,tomcat对应的是Executor

三.实现形式

  1. Connection per thread 每个连接一个线程,即Connector和Servlet可以共用一个线程,这种web服务方案 。每次来个请求,服务器便创建一个线程(或者线程池中选择线程)由于线程不可能无限制增加,当线程比较多时,服务负载会很大。
  2. Request per thread 每请求一个线程,即等到具体服务请求时,才独立分配线程方式。而这个线程通常是在线程池中分配,如果没有空闲的执行线程,那么请求会被挂起,当请求挂起的数目(即排队数)超过预设最大请求数(tomcat maxConnections值),服务会拒绝服务器(Service Unavailable)。此时,Connector和Servlet(Executor)也可以不共用一个线程,一个维护连接,Executor用独立的线程来服务,apache,tomcat等主流实现方案都采用这种方式

猜你喜欢

转载自blog.csdn.net/nioqnw/article/details/86678633