浅谈PHP的线程安全与非线程安全版本

Windows版的PHP从版本5.2.1开始有Thread Safe(线程安全)和None Thread Safe(NTS,非线程安全)之分,这两者不同在于何处?到底应该用哪种?这里做一个简单的介绍。从2000年10月20日发布的第一个Windows版的PHP3.0.17开始的都是线程安全的版本,这是由于与Linux/Unix系统是采用多进程 的工作方式不同的是Windows系统是采用多线程的工作方式。如果在IIS下以CGI方式运行PHP会非常慢,这是由于CGI模式是建立在多进程的基础之上的,而非多线程。一般我们会把PHP配置成以ISAPI的方式来运行,ISAPI是多线程的方式,这样就快多了。但存在一个问题,很多常用的PHP扩展是以 Linux/Unix的多进程思想来开发的,这些扩展在ISAPI的方式运行时就会出错搞垮IIS。因此在IIS下CGI模式才是PHP运行的最安全方 式,但CGI模...阅读全文

为什么有的程序员觉得自己是个打杂的?

先说几句题外话。前几天在小密圈里介绍了几位嘉宾,大部分是我的同事,其中还有一位是我老板。有人发消息问我:“你把同事老板都拉到圈子里,不怕有的话不方便说么?”其实我平时连发朋友圈都几乎不用分组。老板同事都在圈子里盯着,确实,我不能嘚瑟得太厉害,因为就算自己不会不好意思,他们也得替我不好意思。所以啊,这样反而于我有益处了。本来就是分享自己作为工程师的日常,以及一些所思所想。有他们在,我的分享反倒更真实和诚实,也让我时时刻刻警醒着做自己,不要上天。此外,就像最初开公众号的初衷,之所以我有那么多东西可以分享,很大程度因为我身边有很多这样给我启发和帮助的朋友、同事。我的故事,很多时候就是他们的故事。言归正传。好几次收到留言,问:觉得每天都没有进步,做的事情似乎都没有太大的意思,自己很难有提高,怎么办?一觉得每天都做着重复性的工作。数学和计算机科学都有两个境界。一个是具体问题,一个是抽象问题。如果对于...阅读全文

Tracking the Money — Scaling Financial Reporting at Airbnb

At Airbnb, the Payments team is responsible for everything related to moving money in Airbnb’s global marketplace. We build technology that powers Airbnb’s massive daily transaction volume to collect payments from guests and distribute payouts to hosts. Our goal is to make the payment experience on Airbnb delightful, magical, and intuitive.Historically, the payments team’s focus was to implement n...阅读全文

PHP Internals Book 中文版 – Zvals – 基础结构

基础结构一个zval(“Zend value”的缩写)代表一个任意类型的PHP变量。所以,它很可能是PHP中最重要的数据结构,同时你将会频繁地使用它。本章节讲述zvals的基础概念及其使用方法。类型和值每一个zval都会存储某个值和其对应的类型。这点非常重要,因为PHP是一门动态类型语言,所以变量的类型只有当运行时才会确定,并不是在编译时就能够确定。此外,zval的类型在其生命周期是可以改变的,所以如果这个zval在最初存储了一个整形,那么在之后的某个时间点他也可能会存储了一个字符串。 类型是存储在一个整形的标签中(一个 unsigned char 类型的变量)。它有8中类型的值,分别对应着PHP中的8中变量类型。这些值可以用诸如IS_TYPE形式的常量来使用。比如:IS_NULL对应null类型,IS_STRING对应字符串类型。真实的值是存储在一个联合体中,如下所示typedef union _zvalue_value ...阅读全文

PHP Internals Book 中文版 – Zvals

Zval本章节的主题为用来表达PHP变量的zval数据结构。我们将会围绕zvals的概念和如何在扩展开发中使用两方面来进行阐述。目录基础结构类型和值访问宏赋值内存管理值语义和引用语义引用计数和写时复制分配并初始化zval管理引用计数和zval销毁复制zval分离zval类型转换和操作符基础操作符比较类型转换阅读全文

PHP Internals Book 中文版

你看到的是PHP内核中文版,翻译自PHP Internals Book。为什么要翻译对技术的饥渴对英语的热爱方便汉语作为母语的人学习交流官方网站PHP Internals BooGithub(更新最快https://github.com/GenialX/php-internals-book-in-chines关于作者Genial内容目录IntroductioUsing the PHP build systeBuilding PHBuilding PHP extensionCreating PHP extensionZvalBasic structurMemory managemenCasts and operationImplementing functionHashtableBasic structurHashtable APSymtable and array AP...阅读全文

按位运算代替乘、除和取模:哪个更快?

许多程序员都意识到这个特例,就是当你乘或除一个2次幂的时候,你可以用位移运算符来代替乘法和除法。比如:你可以用i << 1代替i*2和用i>>1代替i / 2。还有一个不太为人所知的方法是取模。但是这些方法实际上哪个更快呢?今天这篇文章就要来测试它们以下就是今天的竞争对手这就是多次执行这些操作后的性能测试我在以下环境中运行了这个测试应用程序• Flex SDK (MXMLC) 4.6.0.23201, compiling in release mode (no debugging or verbose stack traces• Release version of Flash Player 11.3.300.27• 2.3 Ghz Intel Core i• Mac OS X 10.8.下面就是我得到的结果上述结果表明按位操作方法在三分之二的测试中取胜:除法和取模。在乘法案例...阅读全文

c语言stack(栈)和heap(堆)的使用详解

一、预备知识—程序的内存分配一个由C/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)—由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap)—一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。3、全局区(静态区)(static)—全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后由系统释放。4、文字常量区—常量字符串就是放在这里的。程序结束后由系统释放。5、程序代码区—存放函数体的二进制代码。二、例子程序代码如下三、堆和栈的理论知识2.1申请方式stack由系统自动分配。例如,声明在函数中一个局部变量int b;系统自动在栈中为b开辟空间heap需要程序员自己申请,并指明大小,在c中用malloc函数...阅读全文