为什么要使用Servlet的背景(通用网关,进程和线程的介绍)

为什么要使用Servlet的背景(通用网关,进程和线程的介绍)

客户端请求,服务器端提供响应

无论我们通过本地机即客户端上网做什么,比如搜索一个查询,打开一个邮件,请求所得到的页面还有各种各样的数据都是从服务器端得到的。服务器是一个设备,它可以根据网络上的不同的客户所提交的请求而提供不同的信息。那么要实现数据在WEB上传输,最开始的时候是通过编写CGICommon Gateway Interface)通用网关接口程序来实现的。

CGI 通用网关接口

通用网关接口其实就是一个服务器方的接口程序,这套接口描述了WEB服务器与同一计算机的软件通信方式,是一个外部网关程序和诸如HTTP这样的信息服务器之间的接口标准。

如同一座桥,把网页和服务器中的执行程序连接起来,客户端的指令传递给服务器,服务器执行的结果再返回给HTML页面。

WEB服务器寻找的普通的HTML文档是静态的,不会改变的文件,然后一个CGI程序是实时执行的,以便输出动态信息,像计数器就可以通过CGI程序来完成一个动态的交互。

虽然利用CGI根据用户请求生成动态主页是一种传统的方法,但是CGI一个很明显的缺点是:CGI是根据浏览器的HTTP请求激活响应进程,每一个请求对应一个进程,当同时有很多请求时,程序挤占系统资源,造成效率低下。

程序,进程和线程的区别

程序就是一组指令的集合,是静态的。

进程则是一组指令序列在处理机上的一次执行过程,是动态的。进程具有动态,并行,独立,异步等特性;一个进程由创建而产生,由调度而进入执行,在资源不能满足时挂起,由撤销而消亡。因此,一个进程是由生命的,且唯一的对应于一个 .exe 文件。

点击结束一个进程将终止一个程序的运行,那么所谓的进程其实就是一个程序的一次执行过程。

线程是进程中某一个单一顺序的控制流,也被称为轻量进程(light-weight-processes) ,它是一个程序的最小执行单元,可以理解为是进程中的实体。

一个进程是可以拥有多个线程,一个线程必须要有一个父进程。

线程不拥有系统资源,只有运行必须的一些数据结构。

父进程的其它线程共享该进程的所拥有的全部资源。

线程是对CPU单元的独立占有的最小单位,每个线程共享进程的数据,在每个进程被创建的时候只有一个主线程。线程可以创建和撤销线程,从而实现程序的并发执行。一般,线程具有就绪,阻塞和运行三种基本状态。线程的优点就在于:使同一个程序能有几个并行执行的路径,提高了执行速度,线程需要的系统开销比进程要小。

总结下来,那么就能够很清楚的知道当我们用CGI通用网关接口来实现数据在WEB上的传递时,对于客户端的每一个请求必须开启一个新实例的进程,可想而知它的速度和效率。

 

为了避免这种损耗,解决这个问题,我们就引入了采用多线程来代替进程的技术—JAVA方向的Servlet技术,能够很清楚的看到Servlet的生命周期,只需要初始化一次Servlet,以后就可以反复的使用。

 

小总结,打个比方

如果有10个人在线,那么CGI就得开10个进程。而类似于JSP,ASP 都是一个进程处理多个请求的,无论多少人在线,都只有一个进程。并且Servlet使用标准的API,可以被许多WEB服务支持,与平台无关。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值