脚本语言的运行方式

转载 2007年09月25日 09:13:00

关于Ruby Rails的Web部署的粗浅认识:
Mongrel 和 Webrick 是两个stand alone ruby web server。(is there more?)
可以单独运行,当然也可以和 apache / lightttpd 组合使用。
这两个web server是进程模型,不能共享server memory,所以是shared nothing。

另一种方式是,fastcgi 和 apache / lightttpd 组合使用。
fastcgi is not stand alone,不能独立运行。
这种组合方式也是进程模型,不能共享server memory,所以是shared nothing。

那么,Python的情况呢? Python web server 也是share nothing?
Zope, Plone的安装文档我简单看了一下,好像Web Server也都可以单独运行,也可以和apache / lightttpd 组合使用。
我搜索了一下 python web server,发现了一些 Python Application Server。

不知道,Zope等 Python Web Server 的模型是怎样的?
是不是进程模型?能否共享Server Memory?是否Share Nothing?

-------------------------------------------------------------------------------------------------------------------------------------------------------

 

现在这类脚本语言的运行方式基本上有三种:

1、Apache Module方式

由Apache进程用module方式来管理,web请求的静态页面和动态请求都是由apache进程内部直接处理掉了。典型的如mod_php,mod_ruby,mod_perl,mod_python。这种方式目前PHP和Perl比较多的采用。这种方式其实还是非常成熟的,apache对于内存管理已经很好,运行效率各方面都很不错。当然apache进程之间也是SNA。

但是ruby和python一般不建议用这种方式,这是因为PHP和Perl解析器的开销非常小,以Apache Module方式跑很灵活而且不怎么消耗资源;而ruby和python的解析器开销非常大,用这种方式,很浪费资源。例如一个PHP解析器跑起来才消耗2MB内存,一般也就7-8MB。但是ruby解析器跑起来就是30MB内存,消耗多的时候高达200多MB。由于很多apache进程只是在处理静态资源,完全没有必要带着一个庞大的ruby在跑,因此就显得过于浪费了。

2、FastCGI/SCGI

ruby on rails很流行使用FastCGI,Python则流行SCGI,也是SNA,比上面的方案在部署和cluster方面要灵活的多。这种方式下,web server处理静态资源,将动态请求通过Unix Socket/TCP端口发送给后面的ruby/python进程来处理。一般来说,页面带有很多静态资源,因此一次用户的动态请求实际上对应了web server的好几个连接去处理静态资源,和一个后台ruby进程去处理动态资源。因为把静态资源和动态请求分开了,所以不再需要那么多的ruby进程来跑。据说一般经验公式是:apache进程数量如果是70个的话,那么FastCGI方式的ruby进程只需要开10个,7:1的比例。另外每个ruby进程在执行一次之后就会hold住这个数据库连接,以后就会直接使用了,避免了数据库连接的开销,已经类似Java的数据库连接池的作用了。

JavaEye2.0现在开了30个FastCGI的ruby进程,但是据我观察,大部分繁忙的时候,真正被用到的ruby进程也只有十几个而已。

3、ServerVM

Java和Zope都是这种方式,一个单一进程在跑,里面很多线程分别处理不同的动态请求,shared memory方式。有时候也会在前面放一个web server提高静态资源的处理能力。这种方式大家都很熟悉了,不用多说。

 

脚本语言和JAVA语言运行机制的区别

脚本语言和JAVA语言运行机制的区别脚本语言 脚本语言一般都有相应的脚本引擎来解释执行,需要解释器才能运行。脚本语言有很多种,解释器也有很多种,所以不同的脚本需要不同的解释器,只有脚本与解释器对...
  • YS0813
  • YS0813
  • 2017年03月20日 23:45
  • 862

shell脚本执行过程分析

一.shell脚本父子进程分析   代码: [cpp] view plain copy #!/bin/bash   echo $$  ...
  • qq_21439971
  • qq_21439971
  • 2017年01月11日 17:12
  • 1871

脚本语言的运行方式

关于Ruby Rails的Web部署的粗浅认识: Mongrel 和 Webrick 是两个stand alone ruby web server。(is there more?) 可以单独运行,当然...
  • joliny
  • joliny
  • 2007年09月25日 09:13
  • 1295

js 程序执行与顺序实现详解

声明:这是转载的 原帖地址:http://www.jb51.net/article/36755.htm JavaScript是一种描述型脚本语言,由浏览器进行动态的解析与执行,浏览器对于不同的方式...
  • bruce_sky
  • bruce_sky
  • 2015年06月08日 15:46
  • 5823

Python 运行方式

Python运行方式有两种:通过python命令和直接运行python文件 1、通过python命令 编写正确的python程序,例如hello.py,保存在桌面上。打开Mac命令行,在命...
  • LiuY_ang
  • LiuY_ang
  • 2017年07月02日 23:22
  • 247

几种常见的脚本语言及其简介

scripting language 脚本语言  (1)命令稿语言 scripting language 是什么?  很难给一个严格的定义; 不妨看看最具代表性的几个例子: perl, pytho...
  • zxq1138634642
  • zxq1138634642
  • 2013年05月30日 15:09
  • 3471

jQuery.js执行过程分析

  JavaScript是一门基于对象的语言,而它的对象技术的实现又和其他语言有着很大的差异,在JavaScript中,一个类的定义一般采用下面这种模式(我所看到的):// 定义一个构造函数;test...
  • WaterSugar
  • WaterSugar
  • 2006年11月22日 15:19
  • 2933

QLExpress脚本语言技术讲解(2) -----QL的基本执行过程

@org.junit.Test public void testDemo() throws Exception{ String express = "10 * 10 + 1 + 2 * 3 + ...
  • express_wind
  • express_wind
  • 2012年02月20日 22:33
  • 3484

脚本语言为何难堪重任?

最近,Ruby、PHP、Python等脚本异常火爆,好像有种要和Java、 .Net一绝高下的趋势,可是在真正大工程中如:银行系统,国家机构,大型的运营开发商等,却很少有他们做为主流开发。脚本语言为何...
  • u012150179
  • u012150179
  • 2013年09月19日 23:45
  • 9580

电力系统的运行方式

电力系统中,为使系统安全、经济、合理运行,或者满足检修工作的要求,需要经常变更系统的运行方式,由此相应地引起了系统参数的变化。在设计变、配电站选择开关电器和确定继电保护装置整定值时,往往需要根据电力系...
  • GZFStudy
  • GZFStudy
  • 2013年01月04日 11:23
  • 5495
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:脚本语言的运行方式
举报原因:
原因补充:

(最多只允许输入30个字)