掌握工作模型和运行原理能够让我们在使用PHP编程语言的时候更加顺利,下面我们就通过案例分析来了解一下具体情况吧,希望通过对本文的阅读,大家对于PHP编程有更多的了解。
PHP的工作模型非常特殊。从某种程度上说,PHP和ASP、、JSP/Servlet等流行的Web技术,有着本质上的区别。
PHP是一种纯解释型在服务端执行的可以内嵌HTML的脚本语言,尤其适合开发Web应用程序。请求一个PHP脚本时,PHP会读取该脚本,并将其编译为Zend操作码,这是要执行的代码的一种二进制表示形式。随后,此操作码由PHP执行并丢弃。PHP脚本在每次被解释时进行初始化,在解释完毕后终止运行。这种运行是互相独立的,每一次请求都会创建一个单独的进程或线程,来解释相应的页面文件。页面创建的变量和其他对象,都只在当前的页面内部可见,无法跨越页面访问。在终止运行后,页面中申请的、没有被代码显式释放的外部资源,包括内存、数据库连接、文件句柄、Socket连接等,都会被强行释放。也就是说,PHP无法在语言级别上实现直接访问跨越页面的变量,也无法创建驻留内存的对象。
PHP在语言级别无法实现跨页面的缓冲机制。这种缓冲机制缺失造成的影响,可以分成两个方面:
一是对象的缓冲。众所周知,很多设计模式都依赖于对象的缓冲机制,创建和销毁对象是很费时间的,因为创建一个对象要获取内存资源或者其它更多资源,对于需要频繁应付大量并发的服务端软件更是如此。因此,对象缓冲的缺失,理论上会极大地降低速度。应尽可能减少创建和销毁对象的次数来提高服务程序的效率,由于PHP目前还不支持多线程,也就无法像Java一样通过线程池调度来弥补这一缺陷;但可以使用三方软件如Memcachd来实现PHP的对象缓冲机制,达到减少对象创建和销毁的时间来提高服务程序的效率。
二是数据库连接的缓冲。对于MySQL,PHP提供了一种内置的数据库缓冲机制,即用mysql_pconnect()代替mysql_connect()来打开数据库而已。PHP会自动回收被废弃的数据库连接,以供重复使用。在实际应用中,这种持久性数据库连接往往会导致数据库连接的伪泄漏现象:在某个时间,并发的数据库连接过多,超过了MySQL的大连接数,从而导致新的进程无法连接数据库。但是过一段时间,当并发数减少时,PHP会释放掉一些连接,网站又会恢复正常。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。