一次web请求,进入tomcat和守护线程

l  一次web请求,进入tomcat

服务器处理请求的模式

1.       收到一个请求就处理,这个时候就不能处理新的请求,这种为阻塞 这个是单线程模型

2.       收到一个请求就新开一个线程去处理任务,主线程返回,继续处理下一个任务,解决了主线程阻塞的问题,有了一定程度的并发量

3.       类似2的模型,但是不是每次收到请求就开一个新的线程,而是使用线程池。这种方式实现的服务器性能会比2高。不过,它依然是阻塞的。线

4.       基于Java NIO实现的服务器模型,它是基于IO多路复用技术(例如Reactor模式)实现,只需要一个线程或者少量线程,就可以处理大量请求。从性能上来说NIO实现的服务器并发性一般大于BIO,所以可以实现高性能的服务器。如果感兴趣,可以学习一些基于NIO的网络编程框架,例如Netty、MINA。

https://segmentfault.com/q/1010000002998038/a-1020000002998730

 

注意:Tomcat运行可以选择BIO或者NIO模型,原理分别对应上面的3和4两种方式。Tomcat默认是BIO方式运行,如果想要换成NIO,可以配置server.xml:

 

l  守护线程

Java中有两类线程:User Thread(用户线程)、Daemon Thread(守护线程);

  Daemon的作用是为其他线程的运行提供服务,比如说GC线程。其实User Thread线程和Daemon Thread守护线程本质上来说去没啥区别的,唯一的区别之处就在虚拟机的离开:如果User Thread全部撤离,那么Daemon Thread也就没啥线程好服务的了,所以虚拟机也就退出了。

Tomcat的关闭正是利用了这个原理,即只要将那唯一的一个用户线程关闭,则整个应用就关闭了。

http://www.cnblogs.com/super-d2/p/3348183.html

http://tyrion.iteye.com/blog/1926319

web服务器中的Servlet,容器启动时后台初始化一个服务线程,即调度线程,负责处理http请求,然后每个请求过来调度线程从线程池中取出一个工作者线程来处理该请求,从而实现并发控制的目的。

 

 

你可能感兴趣的:(learn,on,work,java,tomcat,线程)