林东
林东
2021年05月03日入驻 合计 3 个作品 累计 109.99 万字 共有 2 订阅
  • 第二节 PHP中的线程安全

    从作用域上来说,C语言可以定义4种不同的变量:全局变量,静态全局变量,局部变量,静态局部变量。下面仅从函数作用域的角度分析一下不同的变量,假设所有变量声明不重名。- 全局变量,在函数外声明,例如,int gVar;。全局变量,所有函数共享,在任何地方出现这个变量名都是指这个变量。- 静态全局变量(static sgVar),其实也是所有函数共享,但是这个会有编译器的限制,算是编译器提供的一种功能。- 局部变量(函数/块内的int var;),不共享,函数的多次执行中涉及的这个变量都是相互独立的,他们只是重名的不同变量而已。- 局部静态变量(函数中的static int sVar;),本函数间共享,函数的每一次执行中涉及的这个变量都是这个同一个变量。

    上面几种作用域都是从函数的角度来定义作用域的,可以满足所有我们对单线程编程中变量的共享情况。现在我们来分析一下多线程的情况。在多线程中,多个线程共享除函数调用栈之外的其他资源。因此上面几种作用域从定义来看就变成了。- 全局变量,所有函数共享,因此所有的线程共享,不同线程中出现的不同变量都是这同一个变量。- 静态全局变量,所有函数共享,也是所有线程共享。- 局部变量,此函数的各次执行中涉及的这个变量没有联系,因此,也是各个线程间也是不共享的。- 静态局部变量,本函数间共享,函数的每次执行涉及的这个变量都是同一个变量,因此,各个线程是共享的。
  • 第一节 线程,进程和并发

  • 第五节 小结

  • 第四节 PHP代码的加密解密

    PHP语言作为脚本语言的一种,由于不需要进行编译,所以通常PHP程序的分发都是直接发布源代码。对于一些开源软件来说,这并没有什么问题,因为它本来就希望有更多的人阅读代码,希望有更多的人参与进来,而对于商业代码来说,这却是一个不太好的消息,不管是从商业秘密,还是从对公司产权的保护来说却是一个问题,基于此,从而引出了对PHP代码的加密和解密的议题。例如国内的Discuz论坛程序在开源之前要运行是必须安装Zend Optimizer的,Zend官方的代码加密软件是Zend Guard,可以用来加密和混淆PHP代码,这样分发出去的代码就可以避免直接分发源代码,不过加密后的代码是无法直接运行的,在运行时还需要一个解密的模块来运行加密后的程序,要运行Zend Guard加密后的代码需要安装Zend Optimizer(PHP5.2之前的版本),或者安装Zend Guard Loader(PHP5.3版本)扩展才能运行。
  • 第三节 中间代码的执行

  • 第二节 语法的实现

    世上没有无缘无故的爱,也没有无缘无故的恨。

    语言从广义上来讲是人们进行沟通交流的各种表达符号。每种语言都有专属于自己的符号,表达方式和规则。就编程语言来说,它也是由特定的符号,特定的表达方式和规则组成。语言的作用是沟通,不管是自然语言,还是编程语言,它们的区别在于自然语言是人与人之间沟通的工具,而编程语言是人与机器之间的沟通渠道。相对于自然语言,编程语言的历史还非常短,虽然编程语言是站在历史巨人的基础上创建的,但是它还很小,还是一个小孩。它只能按编程人员所给的指令翻译成对应的机器可以识别的语言。它就相当于一个转化工具,将人们的知识或者业务逻辑转化成机器码(机器的语言),让其执行对应的的操作。而这些指令是一些规则,一些约定,这些规则约定都是由编程语言来处理。

    就PHP语言来说,它也是一组符合一定规则的约定的指令。在编程人员将自己的想法以PHP语言实现后,通过PHP的虚拟机将这些PHP指令转变成C语言(可以理解为更底层的一种指令集)指令,而C语言又会转变成汇编语言,最后汇编语言将根据处理器的规则转变成机器码执行。这是一个更高层次抽象的不断具体化,不断细化的过程。

    在这一章,我们讨论PHP虚拟机是如何将PHP语言转化成C语言。从一种语言到另一种语言的转化称之为编译,这两种语言分别可以称之为源语言和目标语言。这种编译过程通常发生在目标语言比源语言更低级(或者说更底层)。语言转化的编译过程是由编译器来完成,编译器通常被分为一系列的过程:词法分析、语法分析、语义分析、中间代码生成、代码优化、目标代码生成等。前面几个阶段(词法分析、语法分析和语义分析)的作用是分析源程序,我们可以称之为编译器的前端。后面的几个阶段(中间代码生成、代码优化和目标代码生成)的作用是构造目标程序,我们可以称之为编译器的后端。一种语言被称为编译类语言,一般是由于在程序执行之前有一个翻译的过程,其中关键点是有一个形式上完全不同的等价程序生成。而PHP之所以被称为解释类语言,就是因为并没有这样的一个程序生成,它生成的是中间代码,这只是PHP的一种内部数据结构。
  • 第一节 Zend虚拟机概述

    在wiki中虚拟机的定义是:虚拟机(Virtual Machine),在计算机科学中的体系结构里,是指一种特殊的软件,他可以在计算机平台和终端用户之间创建一种环境,而终端用户则是基于这个软件所创建的环境来操作软件。在计算机科学中,虚拟机是指可以像真实机器一样运行程序的计算机的软件实现。

    虚拟机是一种抽象的计算机,它有自己的指令集,有自己的内存管理体系。在此类虚拟机上实现的语言比较低抽象层次的语言更加明了,更加简单易学。
  • 第八节 小结

    我们平常在讨论算法时会讲到空间复杂度,一般来说这里的空间复杂度是指所占内存的大小。这就突显了内存管理在我们编程过程中的重要性。从某种意见上来说内存也属于缓存的一种,它的作用就是将硬盘或其它较慢存储介质中的数据更快的提供给处理器(或处理器缓存)。
  • 第七节 内存泄漏

    内存泄漏指的是在程序运行过程中申请了内存,但是在使用完成后没有及时释放的现象,对于普通运行时间较短的程序来说可能问题不会那么明显,但是对于长时间运行的程序,比如Web服务器,后台进程等就比较明显了,随着系统运行占用的内存会持续上升,可能会因为占用内存过高而崩溃,或被系统杀掉(OOM)。
  • 第六节 写时复制(Copy On Write)

  • 第五节 内存管理中的缓存

    在维基百科中有这样一段描述:凡是位于速度相差较大的两种硬件之间的,用于协调两者数据传输速度差异的结构,均可称之为Cache。从最初始的处理器与内存间的Cache开始,都是为了让数据访问的速度适应CPU的处理速度,其基于的原理是内存中“程序执行与数据访问的局域性行为”。同样PHP内存管理中的缓存也是基于“程序执行与数据访问的局域性行为”的原理。引入缓存,就是为了减少小块内存块的查询次数,为最近访问的数据提供更快的访问方式。
  • 第四节 垃圾回收

    垃圾回收机制是一种动态存储分配方案。它会自动释放程序不再需要的已分配的内存块。自动回收内存的过程叫垃圾收集。垃圾回收机制可以让程序员不必过分关心程序内存分配,从而将更多的精力投入到业务逻辑。在现在的流行各种语言当中,垃圾回收机制是新一代语言所共有的特征,如Python、PHP、Eiffel、C#、Ruby等都使用了垃圾回收机制。虽然垃圾回收是现在比较流行的做法,但是它的年纪已经不小了。早在20世纪60年代MIT开发的Lisp系统中就已经有了它的身影,但是由于当时技术条件不成熟,从而使得垃圾回收机制成了一个看起来很美的技术,直到20世纪90年代Java的出现,垃圾回收机制才被广泛应用。
  • 第三节 内存使用:申请和销毁

  • 第二节 PHP中的内存管理

  • 第一节 内存管理概述

    从某个意义上讲,资源总是有限的,计算机资源也是如此,衡量一个计算机处理能力的指标有很多,根据不同的应用需要也会有不同的指标,比如3D游戏对显卡的性能有要求,而Web服务器对吞吐量及响应时间有要求,通常CPU、内存及硬盘的读取和计算速度具有决定性的作用,在同一时刻这些资源是有限的,正是因为有限我们才需要合理的利用他们。
  • 第十节 小结

    编程语言的实现是一门非常复杂的工程。包括语法实现,对象模型。流程结构等等的设计和实现。在面向对象语言中对象模型是尤为重要的,PHP的对象模型比较常规,和Java/C++类似。
  • 第九节 标准类

    SPL,PHP标准库(Standard PHP Library),从 PHP 5.0 开始内置的接口和类的集合,从 PHP5.3 开始逐渐成熟并成为内核组件的一部分。但是由于其文档的稀少以及推行的力度不够,导致较多的PHP开发人员对其不了解,甚至闻所未闻。
  • 第八节 命名空间

    在维基百科中,对命名空间的定义是:命名空间(英语:Namespace)表示标识符(identifier)的上下文(context)。一个标识符可在多个命名空间中定义,它在不同命名空间中的含义是互不相干的。在编程语言中,命名空间是一种特殊的作用域,它包含了处于该作用域内的标识符,且本身也用一个标识符来表示,这样便将一系列在逻辑上相关的标识符用一个标识符组织了起来。函数和类的作用域可被视作隐式命名空间,它们和可见性、可访问性和对象生命周期不可分割的联系在一起。
  • 第七节 对象

    对象是我们可以进行研究的任何事物,世间万物都可以看作对象。它不仅可以表示我们可以看到的具体事物,也可以表示那些我们看不见的事件等。对象是一个实体,它具有状态,一般我们用变量来表示,同时它也可以具有操作行为,一般用方法来表示,对象就是对象状态和对象行为的集合体。

    在之前我们很多次的说到类,对于对象来说,具有相同或相似性质的对象的抽象就是类。因此,对象的抽象是类,类的具体化就是对象,我们常常也说对象是类的实例。从对象的表现形式来看,它和一般的数据类型在形式上十分相似,但是它们在本质是不同的。对象拥有方法,对象间的通信是通过方法调用,以一种消息传递的方式进行。而我们常说的面向对象编程(OOP)使得对象具有交互能力的主要模型就是消息传递模型。对象是消息传递的主体,它可以接收,也可以拒绝外界发来的消息。

    这一小节,我们从源码结构来看看PHP实现对象的方法以及其消息传递的方式。
  • 第六节 PHP保留类及特殊类

    在面向对象语言中,都会内置一些语言内置提供的基本功能类,比如JavaScript中的Array,Number等类,PHP中也有很多这种类,比如Directory,stdClass,Exception等类,同时一些标准扩展比如PDO等扩展中也会定义一些类,PHP中类是不允许重复定义的,所以在编写代码时不允许定义已经存在的类。
  • 前一页 后一页