第十三张_异步处理

13.1、概述

计算机的内存是有限的。Servlet/JSP容器的设计者很清楚这一点,因此他们提供了一些可以进行配置的设置,以确保容器能够在宿主机器中正常运行。例如,在Tomcat7中,处理进来请求的最多线程数量为200。如果是多处理器的服务器,则可以放心地增加线程数量,不过建议你还是尽量使用这个默认值。

Servlet或Filter一直占用着请求处理线程,直到它完成任务。如果完成任务花费了很长时间,并发用户的数量就会超过线程数量,容器将会遇到超出线程的风险。如果发生这种情况,TOmcat就会将超出的请求堆放在一个内部服务器Socket中(其他容器的处理方式可能会有所不同)。如果继续进来更多的请求,它们将会遭到拒绝,直到有资源可以处理请求为止。

异步处理特性可以帮助你节省容器线程。这项特性适用于长时间运行的操作。它的工作是等待任务完成,并释放请求处理线程,以便另一个请求能够使用该线程。注意,异步支持只适用于长时间运行的任务,并且你想让用户知道任务的执行结果。如果只有长时间运行的任务,但用户不需要知道处理的结果,那么则只要提供一个Runnable给Executor,并立即返回。例如,如果需要产生一份报表,并在保镖准备就绪之后通过电子邮件将报表发送出去,那么就不适合使用异步处理特性了。相反,如果需要产生一份报表,并且报表完成之后要展示给用户看,那么就可以使用异步处理。

13.2、编写异步的Servlet和Filter

WebServlet和WebFilter注解类型可以包含新的asyncSupport属性,为了编写能够支持异步处理的Servlet和Filter,asyncSupported属性必须设为true:

@WebServlet(asyncSupported=true...)

@WebFilter(asyncSupported=true...)

另一种在配置文件中配置

<servlet>

<servlet-name>AsyncServlet</servlet-name>

<servlet-class>servlet.MyAsyncServlet</servlet-class>

</servlet>

时间: 2024-12-14 08:07:21

第十三张_异步处理的相关文章

android内部培训视频_第四节(1)_异步网络操作

第四节(1):异步网络操作  一.结合asyncTask下载网络图片 1.定义下载类,继承自asyncTask,参数分别为:String(url地址),Integer(刻度,本例没有用到),BitMap(下载成功后的图片) public class downloadImageTask extends AsyncTask<String, Integer, Bitmap> { /** * 在线程开始之前执行 */ @Override protected void onPreExecute() {

python_高级进阶(4)同步_异步_回调函数_阻塞

阻塞 阻塞: 程序运行时,遇到了IO,程序挂起,cpu被切走. 非阻塞 非阻塞: 程序没有遇到IO,程序遇到IO但是我通过某种手段,让cpu强行运行我的程序. ? #同步: 提交一个任务,自任务开始运行直到此任务结束(可能有IO),返回一个返回值之后,我在提交下一个#? #异步: 一次提交多个任务,然后我就直接执行下一行代码. 收取结果 : 1将所有的任务的结果统一回收. 2. 完成一个任务,返回一个结果. 给三个人发布任务: 同步: 先告知第一个人完成写书的任务,我从原地等待,等他两天之后完成

IT职业技能谱十三张

1 程序开发语言综述 2 iOS开发工程师必备技能 3 运维工程师必备技能 4 前端工程师必备技能 5 大数据工程师必备技能 6 云计算工程师必备技能 7 安全工程师必备技能 8 移动无线测试工程师必备技能 9 嵌入式开发必备技能 10 微服务架构技能图谱 11 Hadoop家族技能图谱 12 OpenResty技能图谱 13 Container容器技能图谱

sql的一些知识_通配符

like操作符 通配符只能用于字符串查询 % 指任意字符出现任意次数,包括0次,不包括NULL SELECT username,weight,age FROM userinfo WHERE username LIKE '张%' _ 指任意字符出现1次 SELECT username,weight,age FROM userinfo WHERE username LIKE '张_'

sql-server笔记V20170429

--快捷键:关闭显示结果:ctrl+R --一.创建表,删除表 /*--创建表 --格式: create table 表名 ( 字段名 数据类型 [约束条件(identity(1,1);primary key)], 字段名2 数据类型 [约束条件] ) */ /* --删除数据库和表 drop 数据库名 drop table 表名 */ /* --创建table学生表 create table TblStudent ( tSId int identity(1,1) primary key, tS

sql-server笔记

--快捷键:关闭显示结果:ctrl+R--一.创建表,删除表/*--创建表--格式:create table 表名( 字段名 数据类型 [约束条件(identity(1,1);primary key)], 字段名2 数据类型 [约束条件] )*/ /*--删除数据库和表drop 数据库名drop table 表名*/ /*--创建table学生表create table TblStudent( tSId int identity(1,1) primary key, tSName nvarchar

sql-server笔记-sql

--快捷键:关闭显示结果:ctrl+R --一.创建表,删除表 /*--创建表 --格式: create table 表名 ( 字段名 数据类型 [约束条件(identity(1,1);primary key)], 字段名2 数据类型 [约束条件] ) */ /* --删除数据库和表 drop 数据库名 drop table 表名 */ /* --创建table学生表 create table TblStudent ( tSId int identity(1,1) primary key, tS

Python处理海量手机号码

Python处理海量手机号码 一.任务描述 上周,老板给我一个小任务:批量生成手机号码并去重.给了我一个Excel表,里面是中国移动各个地区的可用手机号码前7位(如下图),里面有十三张表,每个表里的电话号码前缀估计大概是八千个,需要这些7位号码生成每个都生成后4位组成11位手机号码,也就说每一个格子里面的手机号码都要生成一万个手机号.而且还有,本来服务器已经使用了一部分手机号码了,要在生成的号码列表里去掉已经使用过的那一批.已经使用过的这一批号码已经导出到了一批txt文本里,约4000w,每个t

SQL 语句基础

一 查询常量1. SELECT 学生编号, 学生姓名,性别 FROM tb_Student2. SELECT 学生姓名 AS 姓名, 性别 AS 学生性别 FROM tb_Student3. SELECT 学生姓名  姓名, 性别  学生性别 FROM tb_Student4. SELECT 学生姓名  姓名, 高数+外语 AS 高数加外语分数  FROM tb_Student5. SELECT 学生姓名,学生编号 FROM tb_Student WHERE LEN(学生姓名) = 26. SE