会员
周边
众包
新闻
博问
闪存
赞助商
Chat2DB
所有博客
当前博客
我的博客
我的园子
账号设置
会员中心
简洁模式
...
退出登录
注册
登录
taek
博客园
首页
新随笔
联系
管理
订阅
[置顶]
mysql优化器在统计全表扫描的代价时的方法
摘要: innodb 的聚集索引 的叶子结点 存放的 是 索引值以及数据页的偏移量 那么在计算全表扫描的代价是怎么计算的呢? 我们知道代价 为 cpu代价+io代价 cpu代价 就是 每5条记录比对 计算一个代价 (这里的记录并不是我们数据记录,而是索引记录) 是数据记录个数 又是如何取出全表的总记录呢 (
阅读全文
posted @ 2017-03-31 19:02 taek
阅读(1607)
评论(0)
推荐(0)
[置顶]
php if 的实现
摘要: 简单分析下php中的分支背后的实现 1.语法分析 对于上面的php代码来说 if 匹配 T_IF $a == 1 匹配 parenthesis_expr , 同时语法分析器要执行 zend_do_if_cond op为zend_is_equal echo "a" 匹配 statement, 同时语法
阅读全文
posted @ 2016-11-20 23:13 taek
阅读(1489)
评论(0)
推荐(0)
[置顶]
CPU 分支预测
摘要: 去年在安宁庄的时候, 有个同事阐述了一个观点:php中的if else 在执行时考虑到效率的原因,不会按我们的代码的顺序一条一条去试,而是随机找出一个分支,执行,如果不对,再随机找到一个分支 当时由于种种原因,也没过多去想这个问题,最近查了下资料,发现里面的学问还挺大的 php解释器是由c编写的,
阅读全文
posted @ 2016-11-19 22:05 taek
阅读(8321)
评论(0)
推荐(0)
[置顶]
php7 改为从栈上分配内在的思路
摘要: php7的特点是规则上不从堆上分配内存,改为从栈上分配内存, 因为有些场景是从堆上分配内在后,还要手动释放内存,利用栈分配内在快的特点,在有需要的时候,再在堆上分配内在 但是栈上分配的内存,不能返回,因为当函数运行完后,就退栈了,但可以将该内在地址传给别的函数 php7的hashTable中的Buc
阅读全文
posted @ 2016-06-02 00:24 taek
阅读(2108)
评论(0)
推荐(0)
[置顶]
php的GC机制
摘要: 在php5.3版本之前, php变量的回收机制只是简单的通过计数来处理(当refcount=0时,会回收内存),但这样会出现一个问题 $a=array("str"); $a[]=&$a; unset($a); 执行unset之前,$a的refcount 为2,执行unset之后,$a的refcout
阅读全文
posted @ 2016-05-09 07:28 taek
阅读(6157)
评论(1)
推荐(0)
[置顶]
protobuffer php使用
摘要: protobuffer是google推出的一种数据传的方式,具体压缩,体积小的特点 protobuffer本身不支持php,若要把.proto文件转化为php支持的文件,需要使用第三方的程序 allegro/php-protobuf 或 drslump/Protobuf-PHP 参考 http://
阅读全文
posted @ 2016-05-08 15:08 taek
阅读(13240)
评论(0)
推荐(0)
[置顶]
php引用使用不恰当而产生问题的地方
摘要: php变量的引用,如果使用的恰当,会带来效率的提升,相反,效率下降 count是个内置函数,参数只接收传值,但现在传入的参数$array是个引用,由于在php5中,某个值是不能引用变量和非引用变量之间使用, 针对这个例子来说,即在count内部,php引擎会copy一个$arrray指向的zval,
阅读全文
posted @ 2016-05-04 13:14 taek
阅读(281)
评论(0)
推荐(0)
[置顶]
mysql层的内存分配
摘要: 参考 http://www.cnblogs.com/justfortaste/p/3198406.html http://m.blog.csdn.net/blog/IT_PCode/17007833 http://blog.chinaunix.net/uid-28364803-id-3419777.
阅读全文
posted @ 2015-12-20 18:02 taek
阅读(1371)
评论(0)
推荐(0)
[置顶]
innodb分配内存
摘要: innodb分配内存有三种方法 1)使用OS的malloc 2)使用innodb自己实现的内存分配方法 3)使用goolge的Tmalloc innodb引擎分析之内存管理 在my.cn配置文件中可设置 #InnoDB是使用自带的内存分配程序, #还是使用当前部署的操作系统中现有的更高效的内存分配程
阅读全文
posted @ 2015-12-01 00:09 taek
阅读(279)
评论(0)
推荐(0)
[置顶]
innodb 源码分析 --锁
摘要: innodb引擎中的锁分两种 1)针对数据结构, 如链表 互斥锁 读写锁 http://mysqllover.com/?p=425 http://www.cnblogs.com/justfortaste/p/3668935.html 2)针对数据表中记录 行锁 表锁 innodb中的互斥锁是依据操作
阅读全文
posted @ 2015-11-04 12:50 taek
阅读(1033)
评论(0)
推荐(0)
[置顶]
安装mysql
摘要: 转自 http://www.iteye.com/topic/1128407 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/m
阅读全文
posted @ 2015-05-26 16:03 taek
阅读(469)
评论(0)
推荐(0)
[置顶]
php 内存分配
摘要: php内核中的内存分配 使用的函数有 emalloc(), erealloc() ,这两个函数分别是malloc(),realloc()函数的封装 关于内存分配有四个容器:cache,小块内存链表,大块内存(链表+树), 剩余rest内存链表 大块内存(链表+二叉排序树):链表中每个bucket除了
阅读全文
posted @ 2015-01-23 14:16 taek
阅读(2740)
评论(0)
推荐(0)
[置顶]
php-echo原理
摘要: 1.语法分析unticked_statement:| T_ECHO echo_expr_list ';';echo_expr_list: echo_expr_list ',' expr { zend_do_echo(&$3 TSRMLS_CC); } | expr ...
阅读全文
posted @ 2014-11-24 16:00 taek
阅读(1626)
评论(0)
推荐(0)
[置顶]
php语法分析
摘要: php的语法分析的主要作用是验证词法分析的基础上将token组成的序列,在php这门语言中是否是一个有效的句子,也可以理解为这些token序列是否匹配设计php这门语言时的语法模型,在匹配的情况下构建具体的程序(组建opcode),以供编译后期使用。 比如:在设计php语言时,需要设计一套语法...
阅读全文
posted @ 2014-09-24 17:54 taek
阅读(2902)
评论(1)
推荐(1)
[置顶]
c malloc分配内存
摘要: php中的内存分配有用类似emalloc这样的函数,emalloc实际上是C语言中的malloc的一层封装,php启动后,会向OS申请一块内存,可以理解为内存池,以后的php分配内存都是在这块内存池中进行的,以至于efree,也不会向OS退回内存,而只是设置标志位,标识efree这块内存不再使用...
阅读全文
posted @ 2014-09-11 15:15 taek
阅读(6099)
评论(2)
推荐(1)
[置顶]
php内核为变量的值分配内存的几个宏
摘要: 在php5.3之前,为某变量分配内存是用宏MAKE_STD_ZVAL;737 #define MAKE_STD_ZVAL(zv) \ # /Zend/zend.h738 ALLOC_ZVAL(zv); \739 INIT_PZVAL(zv);165 #define ALLOC_Z...
阅读全文
posted @ 2014-06-17 21:48 taek
阅读(371)
评论(0)
推荐(0)
2019年3月22日
php7 引用成为一种类型
摘要: $a=range(10000) refcount 1 $b=&$a ref (refcount=2) val(refcount=1) $a1=$a ref(refcount=2) val(refcount=2) unset($a) ref(refcount=1) val(refcount=2) un
阅读全文
posted @ 2019-03-22 11:15 taek
阅读(613)
评论(0)
推荐(0)
function参数
摘要: 将参数从左到在依次放到栈里 当调用函数时,将
阅读全文
posted @ 2019-03-22 11:14 taek
阅读(669)
评论(0)
推荐(0)
execvp php-fpm reload使用的函数
摘要: php重启 本质上是调用 execvp("/usr/local/php/sbin/php-fpm"); execvp就是用一个新的进程把自己替换掉,一个进程一旦调用exec类函数,它本身就"死亡"了,系统把代码段替换成新的程序的代码,废弃原有的数据段和堆栈段,并为新程序分配新的数据段与堆栈段,唯一留
阅读全文
posted @ 2019-03-22 11:14 taek
阅读(417)
评论(0)
推荐(0)
fastcgi
摘要: nginx和php-fpm是通过fastcgi协议进行通信的,php-fpm本身就是个socket服务端,nginx拿到url后,识别出.php结尾的地址后,会传给php-fpm,php-fpm通过预先启动的进程,调用php解释器 fastcgi消息有10种,其中有 fcgi_begin_reque
阅读全文
posted @ 2019-03-22 11:13 taek
阅读(444)
评论(0)
推荐(0)
php-fpm定时器
摘要: php-fpm有三种定时器 1)主进程接收到用户的信号,例如sigusr,主进程执行kill(子进程号,sigquit),的同时,设置定时器,在一个无限循环里如果当前时间 大于或等于 该定时器的过期时间,则主进程执行kill(子进程号,sigterm); 2)对于在php-fpm里设置了reques
阅读全文
posted @ 2019-03-22 11:13 taek
阅读(431)
评论(0)
推荐(0)
php 类继承
摘要: 2. 针对extends 的函数 zend_do_fetch_class 3.ZEND_FETCH_CLASS_SPEC_CONST_HANDLER函数 4.zend_fetch_class_by_name函数 开始声明类 绑定父类
阅读全文
posted @ 2019-03-22 11:12 taek
阅读(681)
评论(0)
推荐(0)
php 对象 调用静态方法
摘要: 1.BNF范式 2.调用静态方法的编译 zend_do_begin_class_member_function_call 3.调用静态方法的编译 zend_do_end_function_call
阅读全文
posted @ 2019-03-22 11:12 taek
阅读(1794)
评论(0)
推荐(0)
php 词法分析,语法分析
摘要: php的词法分析 可以理解为 通过一定的规则,把输入的代码 区分出哪些是 是$开头的变量, 哪些是 以两个单引号括起来的字符串,哪些是以两个双引号括起来的字符串 等等, 这些区分出来的东西 称为token ,token 之间的联系 是由语法分析来完成的, 比如 赋值,加减乘除; 语法分析详见这里 语
阅读全文
posted @ 2019-03-22 11:12 taek
阅读(1568)
评论(0)
推荐(0)
php unset变量
摘要: 1)词法分析 2)语法分析 unticked_statement: | T_UNSET '(' unset_variables ')' ';' //unset($a,$b) 还能这么用呢,第一次知道 unset_variables: unset_variable | unset_variables
阅读全文
posted @ 2019-03-22 11:11 taek
阅读(1002)
评论(0)
推荐(0)
php5数组与php7数组区别
摘要: http://ju.outofmemory.cn/entry/197064 http://www.fzb.me/2015-9-16-php7-implementation-hashtable.html http://ju.outofmemory.cn/entry/154095 http://www.
阅读全文
posted @ 2019-03-22 11:11 taek
阅读(2358)
评论(0)
推荐(0)
下一页
公告