- 博客(17)
- 资源 (1)
- 收藏
- 关注
原创 杂谈(fastcgi)
关于cgi,fastcgi的一些问题,有些同学还是搞混,好吧,这里说一下。 1、cgi,其实是个概念,一个协议。webserver和后端程序通信的一个协议,比如要传啥内容给后端程序,用户请求的query?get?post?cookie ?.. cgi只是规定了一些内容。。 2、fastcgi,fast..顾名思义,就是更快一些,性能更高一些。怎么高法?你得了解一下传统的cgi实现,比如php,每
2016-02-28 16:35:03 407
转载 关于php线程安全的一些东西
本篇文字转自:http://blog.codinglabs.org/articles/zend-thread-safety.html在阅读PHP源码和学习PHP扩展开发的过程中,我接触到大量含有“TSRM”字眼的宏。通过查阅资料,知道这些宏与Zend的线程安全机制有关,而绝大多数资料中都建议按照既定规则使用这些宏就可以,而没有说明这些宏的具体作用。不知道怎么回事总是令人不舒服的,因此我通过阅读源码和
2016-02-28 14:35:53 627
原创 开发protobuf扩展的一些笔记
一个需求要接入公司内部的一个基于protobuf协议的接口,protobuf的库文件都是proto编译器生成的cpp文件。要编译成php扩展的话,需要c/c++混编,这里记录一下。1、升级一下安装的protobuf,貌似C1的机器上的protobuf都是2.4.0的,当编译高级的一些语法的proto文件的时候都会报错的,升级到2.5.0以上的版本好些。2、proto编译器会根据proto文件生成相关
2016-01-05 17:43:40 1961
转载 Memcache mutex设计模式
周六的S2 Web 2.0技术沙龙上介绍了memcache中使用mutex场景(文后要演讲稿),有网友对详情感兴趣,简单介绍如下。场景 Mutex主要用于有大量并发访问并存在cache过期的场合,如首页top 10, 由数据库加载到memcache缓存n分钟 微博中名人的content cache, 一旦不存在会大量请求不能命中并加载数据库 需要执行多个IO操作生成的数据存在cache中, 比
2015-12-15 20:30:02 397
原创 调试fpm的一些小笔记
fpm状态下没法生成core文件的条件下调试比较麻烦。 1、core文件无法生成 1)、不能生成原因很多,比如不让生成,或者线上环境,或者core文件过大等等,anyway,就是各种不方便生成而且非要生成就得改一些参数还要重启重新登录等等乱七八糟的原因..。 2)、修改fpm的配置文件,让只生成一个fpm子进程。重启,获取该process ID。 3)、gdb && gdb
2015-11-27 17:43:32 1240
原创 php7下的opcache特性导致的一个bug排查
首先这不是opcache的bug,我感觉这算是新特性导致代码不太兼容导致的,因为我们的代码在php5下是跑正常的。 最近在给我们的框架兼容php7,因为框架是扩展的形式,所以得针对新版的zend api修改。一些都OK了,在cli测试都是没问题的,感觉很爽。但是放到了php-fpm的环境下,打开opcache。一些乱七八糟的事情发生了,fpm启动后第一次请求是正常,第二次后就各种segmentfa
2015-11-27 17:42:15 4589 2
原创 一个轻量级的c编写的php接口平台框架
1、gihtub地址:https://github.com/linkaisheng/edge 2、程序流程图: 3、性能彪悍,文档待续..
2015-11-01 14:39:43 1546
原创 yar框架的并行原理分析(libcurl+epoll)
yar是一个轻量级的php rpc框架。有意思的是它的并行,其实就是libcurl作为网络库提供http请求,然后用epoll做为事件监听来实现整个异步并行调用的。在此基础上,就是如何利用zend api来对整个逻辑的封装了。我们先抛开zend api,单独看看libcurl 结合 epoll 是如何来做到异步并行调用的。 先大致熟悉一下libcurl,官网http://curl.haxx.se/
2015-11-01 13:01:19 3004 2
原创 php扩展获取_ENV、_SERVER时踩到的坑。
最近写个router组件,需要获取SERVER这种超全局变量。发现在symbool_table里面死活拿不到,但是POST、GET的可以拿啊。。我就郁闷了,最后看了下初始化流程。发现坑爹的就排除了SERVER和ENV这2变量的初始化在symbool_table里面-。-。最后上了官网查到了这个,http://php.net/manual/en/ini.core.php#ini.auto-global
2015-06-05 18:38:20 1776 2
原创 关于php扩展中使用ini配置和使用全局变量
关于php扩展中使用ini配置和使用全局变量。有时候一段程序逻辑的方向修改,可以根据输入的数据进行修改,也可以直接去更改代码,但这样带来了灵活性的缺失和安全的问题,所以引入了php.ini配置文件,为了方便提供在ini里面配置。下面配置该全局。 首先,确定该全局变量是不是线程安全的(因为一个线程里面可能会提供多个request,考虑到数据共享带来的风险),主要下是否需要include “TSRM.
2015-05-10 20:51:01 4024
原创 关于php扩展包里面的configure来源说明
我们知道在Linux下构造软件,一般都经过以下几个步骤,confiure &&make && make install。 make需要makefile,而makefile需要经过confiure生成的,其实confiure是个shell脚本,makefile的内容由confiure.in来生成的。而confiure.in的内容是啥呢?其实就是一堆m4文件的集合,m4文件由m4软件解析。m4是一个宏
2015-05-02 17:37:52 608
转载 Linux下Gcc生成和使用静态库和动态库详解(转)
一、基本概念 1.1什么是库 在windows平台和linux平台下都大量存在着库。 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。 由于windows和linux的平台不同(主要是编译器、汇编器和连接器的不同),因此二者库的二进制是不兼容的。 本文仅限于介绍linux下的库。1.2库的种类 linux下的库有两种:静态库和共享库(动态库)。 二者的不同点在于代
2015-05-01 13:33:46 504
原创 文章标题
几个常用的PHP宏,先一个一个记下来吧,以后还会增加不少: main/SAPI.h:define SG(v) TSRMG(sapi_globals_id, sapi_globals_struct *, v)SG宏主要用于获取SAPI层范围内的全局变量
2015-04-13 14:46:33 346
原创 并发编程的几点
并发编程主要基于以下几种:1、多进程并发,依赖于fork类模式的并发,典型的服务器模型就是一个client的confd会fork一个进程去处理。当然了,进程使用的好坏很明显,不赘述。2、多路复用IO模式。基于select、poll、epoll等基础库提供的,基于io驱动模式,通过阻塞式监听IO状态,再根据返回可用的IO描述符,来进行相应的逻辑处理。这种往往是单线程,多核CPU无法利用。除非
2015-04-05 20:27:15 404
原创 我目前使用redis在以下几个地方
1、分布式并发锁控制。2、简单的key-value存取加数据持久化。3、队列。4、大数据索引存储。5、list的一些扩展应用。
2015-04-05 20:24:03 1523
PHP中文手册
2014-08-30
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人