基础知识 笔记

本文深入探讨了脚本语言和编译性语言的差异,重点介绍了PHP与Python/Ruby的运行机制差异,以及事件驱动模型在Windows系统和面向对象语言中的应用。同时,讨论了正则表达式、HTTP REST SOAP SOA web服务的区别,以及RPC和Web服务的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

$
脚本语言和编译性语言的区别。
脚本语言是由虚拟机解释执行 虚拟机进程本身是操作系统中一个普通的进程
像c\c++这种编译型语言 编译出来的程序 是由操作系统根据可执行文件的格式 加载执行
php5之后的版本才有垃圾回收。
$
python这个脚本语言能编写桌面软件? php用框架速度会比python和ruby都慢很多。python更应该与java比较类似,而不是和php。真是php的这个简单的特点,导致不能用php编写桌面软件,至少从php现阶段的内部实现角度。
与ruby、perl、php比python的强项是桌面开发
不是说脚本语言解释完就一定释放内存了,比如python和ruby都有垃圾回收机制。
应该说python和ruby更像java,跟java的唯一区别是java先编译成字节码,再解释执行,而python和ruby猜测应该是直接解释命令,但是像java虚拟机那样,它有垃圾回收机制,不是说执行完一个脚本就释放内存,不像php执行完一脚本就释放内存了。

$
PHP和Python/Ruby的运行机制有一个本质区别:PHP是每次HTTP请求过来以后,初始化全部资源(例如创建数据库链接、加载系统类库,创建缓存等等),处理完毕,释放全部资源,这不像Python/Ruby之类带有GC的脚本语言,Python/Ruby是初次启动的时候初始化资源,随后的请求就不必再次初始化资源了。 
这种机制的差异带来的区别就是:
1、PHP极难出现严重的内存泄露问题,随便你代码写的多烂,反正每个请求一执行完毕,所有资源统统释放光。而Python/Ruby则需要依赖GC来回收内存,因此稍有不慎,还是会出现GC无法释放的内存泄露问题。 
2、PHP每次请求都要初始化资源,这个开销非常大。所以尽管PHP解析器本身的运行速度是极快的,但是一旦使用复杂的PHP框架,那么由于需要每次请求的时候初始化整个框架,性能的下降非常厉害,你用一个很复杂的PHP框架的结果就是整体性能被Ruby远远甩开。这也是为什么PHP社区这么多年来,并不怎么倾向于使用框架的原因之一。 
3、由于PHP这种每请求初始化资源的机制,也造成了PHP添加跨请求的高级特性相当困难,这是PHP本身一个很大的限制,但是反过来说,正是这种限制使得PHP始终保持在一个比较简单的web语言上面,而正是这一点才是PHP得以成为互联网第一Web编程语言的原因,因此也未必就不好。 
总之,PHP和Ruby的差异还是很大的,不适合放在一起比较,其实应该比较的是Ruby和Python才对。 
$
事件驱动模型的理解
更认真地说,所谓的事件驱动模型,大约是个消息循环来着。消息循环人家已经完成了,你只要往里面填入应用逻辑就可以了。
就是说人家事先写好了一个框架,你填的东西,被框架调用。就像继承类中的虚函数被基类中的函数调用一样 -- 就像template method一样。根据框架写程序,就是做填空题。这个就是所谓的回调/hook、控制反转。
。windows系统的应用也是个消息循环。
WINDOWS程序消息驱动机制。Linux的界面也是消息驱动的,不是仅有windows才有。
Windows系统是建立在事件驱动的机制上的,说穿了就是整个系统都是通过消息的传递来实现的。而钩子是Windows系统中非常重要的系统接口,用它可以截获并处理送给其他应用程序的消息 。
在Windosw系统中,程序的设计围绕事件驱动来进行。当对象有相关的事件发生时(如按下鼠标键),对象产生一条特定的标识事件发生的消息,消息被送入消息队列,或不进入队列而直接发送给处理对象,主程序负责组织消息队列,将消息发送给相应的处理程序,使相应的处理程序执行相应的动作,做完相应的处理后将控制权交还给主程序。 
在这种机制中,对象的请求仅仅是向队列中添加相应的消息,耗时的处理则被分离给处理函数。这种结构的程序中各功能模块界限分明,便于扩充,能充分利用CPU的处理能力,使系统对外界响应准确而及时。
这个事件驱动不同于windows下面的事件驱动,windows下严格应该叫消息驱动
http://bbs.chinaunix.net/thread-788528-1-1.html
以上就是面向过程语言(例如php)建立事件驱动机制的办法。而在面向对象的语言中,依然靠的是回调的方式,只不过传递的不是‘回调函数名’,而是传递的类名,而类中其实
已经绑定了方法(本质上依然是函数)。因此可以说面向对象的语言依然使用的是回调函数的方式建立的事件驱动的机制。
因为事件驱动的机制把“响应”作为应付变化的要素,同时保持“事件和逻辑关系”的稳定性,所以'响应'常常是自定义的。
一个响应常常表现为一个函数,在一段程序中,当事件出现后,就用回调函数的方式调用响应函数,这样,我们只需要修改响应函数,而事件和程序的逻辑关系却可以保持稳定,同时把响应独立了出来,作为了可变化和修改的独立部分。
有兴趣的朋友,可以研究一下php中wordpress程序里的插件机制,主要的几个函数为"add_action,do_action,add_filter...等等".这几个函数,就是wordpress建立的回调操作函数,其在整个wordpress中的具体应用,体现的就是这里的事件驱动机制。
如果换成java来实现类似于wordpress的这个钩子,估计就是类之间的调用,会比较麻烦,但是一般在面向对象的语言中,这种形式不叫钩子,但是原理相同。
可见面向过程更简洁了,面向对象中将一切看出是对象,所以是单纯的对象调用。面向对象并不是取代面向过程,而是某种特定领域的补充.

$
面向过程的钩子函数(php,javascript)   有人说对应面向对象的类之间的调用,有人说也可以类比于面向对象的接口吧
$
Javascript中的onclick(function1)应该也是注册函数,非阻塞的,事件发生时,就采用回调函数function1执行任务,跟面向对象的观察者模式是一样的。
$
Windows的基于消息驱动的编程思想是消息驱动加观察者而模式的结合.
$
解释性语言和编译性语言的区别
Python、Javascript、Ruby和其他动态类型语言,体现出来的另一种优势是,可以在运行时修补一个对象实例,给它添加行为(在Python领域,这常被称作Monkey Patching)。这好像不错,但它对理解代码,代码静态分析,调试等来说就太糟了。它可能在修修补补时很方便,但从长期来看,并不是个好办法。 
开发快的原因是如果是小程序看不出来编译性多慢,但是如果是一个浏览器这样的大的程序,编译完一次是很费时间的。而脚本语言边翻译边执行就快多了。开发人员节约很多时间。


最重要的区别是每次执行都需要重新编译。而编译性语言,是下次执行时不用再编译了。
而且编写源程序的高级语言可以使用更加灵活和富于表现力的语法。
php可变的变量名会给编程带来很大的方便。也就是说变量名可以被动态的命名和使用。
$正则表达式
$

$
http Rest soap soa webservice区别
REST是一种轻量级的Web Service架构风格,其实现和操作比SOAP和XML-RPC更为简洁,可以完全通过HTTP协议实现,还可以利用缓存Cache来提高响应速度,性能、效率和易用性上都优于SOAP协议。REST架构对资源的操作包括获取、创建、修改和删除资源的操作正好对应HTTP协议提供的GET、POST、PUT和DELETE方法,这种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性。REST架构尤其适用于完全无状态的CRUD(Create、Read、Update、Delete,创建、读取、更新、删除)操作。 
基于REST的软件体系结构风格(Software Architecture Style)称之为面向资源体系架构(Resource-oriented Architecture,ROA)。按照REST原则设计的软件、体系结构,通常被称为“REST式的”(RESTful),在本文中以下称之为RESTful Web服务,以便于和基于SOAP的Web服务区别。  
http是rest的一种实现方式。
Rest和soap是webservice的实现方式。

Rpc(远程过程调用)和webservice的区别
其实都是为了跨语言跨进程通信,只不过后者是基于web,前者则范围更广。。
http://blog.youkuaiyun.com/tekkenvs11/article/details/6280896#
y
其实现的原理并没有本质的区别,在应用开发层面上有以下区别:
1、Remoting可以灵活的定义其所基于的协议,如果定义为HTTP,则与Web Service就没有什么区别了,一般都喜欢定义为TCP,这样比Web Service稍为高效一些
2、Remoting不是标准,而Web Service是标准;
3、Remoting一般需要通过一个WinForm或是Windows服务进行启动,而Web Service则需要IIS进行启动。
4、在VS.net开发环境中,专门对Web Service的调用进行了封装,用起来比Remoting方便 

web service顾名思义就是一个运行在web上的服务。这个服务通过网络为我们的程序提供服务方法。类似一个远程的服务提供者。 
WebService的运行机理 
首先客户端从服务器的到WebService的WSDL,同时在客户端声称一个代理类(Proxy Class) 
这个代理类负责与WebService服务器进行Request 和Response 
当一个数据(XML格式的)被封装成SOAP格式的数据流发送到服务器端的时候,就会生成一个进程对象并且把接收到这个Request的SOAP包进行解析,然后对事物进行处理,处理结束以后再对这个计算结果进行SOAP包装,然后把这个包作为一个Response发送给客户端的代理类(Proxy Class),同样地,这个代理类也对这个SOAP包进行解析处理,继而进行后续操作。
这就是WebService的一个运行过程。
下面对.net Remoting进行概括的阐述: 
.net Remoting 是在DCOM等基础上发展起来的一种技术,它的主要目的是实现跨平台、跨语言、穿透企业防火墙,这也是他的基本特点,与WebService有所不同的是,它支持HTTP以及TCP信道,而且它不仅能传输XML格式的SOAP包,也可以传输传统意义上的二进制流,这使得它变得效率更高也更加灵活。而且它不依赖于IIS,用户可以自己开发(Development)并部署(Dispose)自己喜欢的宿主服务器,所以从这些方面上来讲WebService其实上是.net Remoting的一种特例。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值