zoukankan      html  css  js  c++  java
  • 分布式有感

    最近有点疲于奔命的感觉,孤军作战不是好事阿。

    以前学分布式计算原理与应用,一直对老师和教材有不满。教材虽然写的中规中矩,可是对java的偏向性无疑是一个败笔。书中的Java代码起个helloworld的作用还可以,真要用起来总觉得生涩无比,整天就在流里面转来转去。实验方面,socket的相关代码没有c的清晰,要不是string类封装了一些应手的函数,真不知道有什么优点。RMI看上去很美好,只是这种美好是建立在实验的基础上的。要真的应用起来,单单异常处理就会要命,网络的不确定性太多了,不是随便架起一层就能抹平的。

    最讨厌的是老师整天在吹嘘servlet的高性能,喋喋不休简直是Java活脱脱的营销人员。servlet相对于cgi的优点,在于两点:一是持续运行,可以轻松维护session信息;二是可以拥有线程池,启动快速,不需频繁启动关闭进程,减少系统消耗。

    有时候真的很难理解他的思维,多个cgi进程就需要加载多份程序?Linux早就实现了多个副本共享一个代码段了。没有线程池方便?可以用进程池啊。而多进程抗崩溃的能力不是多线程能够轻易赶上的。fastcgi的出现,也使得cgi的持续运行成为了可能,维护session不再遥不可及。

    最重要的一点是,cgi模型非常清晰易懂。前端的服务器做一个dispatch的作用,将请求分发到不同程序,并可以应付一定的IO请求。cgi程序自身从环境变量读取请求信息(get)或从标准输入流读入(post方法),最后将结果输出到标准输出流,服务器轻松地将cgi的标准输出流重定向到自己身上,再返回给Browser端。      而fastcgi则采取了一种更为激进一点的方式,fastcgi具有daemon进程,服务器端与fastcgi端通过socket进行通讯。

    ajax的出现,使程序的行为变得更加灵活。原来的动态网页,流程一般是从Browser发起请求,服务器端接受请求转发给cgi,cgi程序与数据库交互,返回动态构造的网页,服务器再转发给Browser。而ajax则可以通过在Browser端运行的js,直接在客户端动态构建网页,切实减轻了服务器端的负载。

  • 相关阅读:
    Redis系列八 使用Jedis
    Redis系列七 主从复制(Master/Slave)
    Redis系列六 Redis事务
    Redis系列五 Redis持久化
    Android7.0 应用内升级
    Redis系列四 Redis常见配置
    06方法
    python协程--yield和yield from
    Python2 生成器 简介
    使用virtualenv使得Python2和Python3并存
  • 原文地址:https://www.cnblogs.com/Lifehacker/p/cgi_fastcgi_and_servlet.html
Copyright © 2011-2022 走看看