java fastcgi_Java Servlet为什么不做成FastCGI模式?

谢邀。

首先明确几点:FastCGI进程(如FastCGI模式的PHP/Python/Perl解释器进程)是Web服务器进程的独立子进程,跟它对应的是Servlet容器JVM进程

跟FastCGI协议对应的是HTTP、AJP等应用层协议

跟PHP页面文件对应的是Servlet类

接下来一条条分(fan)析(bo)题目里的描述:

JVM多线程架构健壮性非常强

理论上多进程确实健壮性更强,但实际上,JVM进程远比普通C/C++进程坚固。

用C/C++写程序,随便一个空指针、内存越界、内存泄漏就可能意外终止进程,更遑论很多C/C++程序处理严重错误的方式都是很粗暴的exit或者panic。

而用Java写代码,要想不小心终止进程很难。异常机制可以保证几乎没有任何Java代码能够直接干掉一个线程或进程,Java程序的线程几乎跟普通C/C++的进程一样脆弱/坚固。

Tomcat静态文件性能并不差

别的Servlet容器不清楚,但是得益于独立的connector设计,较新版本的Tomcat有了NIO、APR等技术的加持,静态文件性能不会比apache httpd差到哪儿去。

“很多网站直接用servlet容器当web服务器”,因为这样很简单,而且暂时可能没遇到或不关心性能瓶颈。

Servlet容器与FastCGI程序之间并没有那么大的差异

关于线程模型,实际上FastCGI规范也允许应用服务进程复用同一个监听端口,多线程并行处理请求,跟Servlet没太大区别。

FastCGI规范的核心,是应用服务程序如何与Web服务器通信。Servlet容器进程跟独立Web服务器进程之间,通过套接字通信,应用层协议主要是HTTP和AJP。而FastCGI应用程序进程跟Web服务器进程也是两个进程,也通过套接字通信,不同的也就应用层是FastCGI协议而已。

当然,FastCGI规范不仅仅包含了一个应用层通信协议,还要求应用程序进程是Web服务器进程的子进程,生命周期受Web服务器管理。

最后回到题目:Java Servlet为什么不做成FastCGI模式?很明显这不是能不能的问题,而是愿不愿意的问题。而事实是,没人愿意这么干。

参考:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值