Web容器会为每个请求分配一个线程,默认情况下,响应完成前,该线程占用的资源都不会被释放。若有些请求需要长时间(例如长处理时间运算、等待某个资源),就会长时间占用线程所需资源,若这类请求很多,许多线程资源都被长时间占用,会对系统的性能造成负担。
Servlet3.0新增了异步处理,可以先释放容器分配给请求的线程与相关资源,减轻系统负担,原先释放了容器所分配线程的请求,其响应将被延后,可以在处理完成(例如长时间运算完成、所需资源已获得)时再对客户端进行响应。
Servlet 3.0之前,一个普通 Servlet的主要工作流程大致如下:
1. Servlet接收到请求之后,可能需要对请求携带的数据进行一些预处理;
2. 调用业务接口的某些方法,以完成业务处理;
3. 根据处理的结果提交响应,Servlet线程结束。
其中第2步的业务处理通常是最耗时的,这主要体现在数据库操作,以及其它的跨网络调用等,在此过程中,Servlet线程一直处于阻塞状态,直到业务方法执行完毕。在处理业务的过程中,Servlet资源一直被占用而得不到释放,对于并发较大的应用,这有可能造成性能的瓶颈。对此,在以前通常是采用私有解决方案来提前结束Servlet线程,并及时释放资源。现在使用异步来解决这些问题。
Servlet异步
最新推荐文章于 2024-04-26 13:38:02 发布