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)

 

十五分钟左右

 

posted @ 2024-02-02 10:59  fnasklf  阅读(21)  评论(0编辑  收藏  举报