servlet 中的BIO与NIO结构
servlet只有一个对象,其中各个线程共享其内存,为了防止出现线程安全问题,servlet对象中是没有属性的。
servlet内部线程处理http请求分为5步
read: 读取网路协议,完整读完http下各个tcp/ip包,拼接成request,就是完整读完http的request的过程
decode: 把网路协议读取到的数据转化为一个java的对象
computer:创建一个新的response对象,把request对象与response对象一起传给service中的方法,调起doGet、doPost等方法
encode:把结果存放在response中并把response封装为协议后返回给客户端
send: 将包分为tcp/ip包一个个返回客户端
一个请求生成一个线程进行以上过程的处理,这就是tomcat的并发处理。
1.BIO 同步阻塞
servlet接收到http请求,会生成一个线程进行处理
在上述五个步骤中,read,与send会占用内存开销,在读取与发送过程中会占用线程,造成不必要的内存开销,也就是阻塞。
2.NIO 同步非阻塞
区别:BIO的io过程在线程中, NIO把read与send放在Niochannel中,推送到队列里而没有用线程去处理,节省了时间
JavaEE平台技术_中国大学MOOC(慕课) (icourse163.org)
十五分钟左右