Press "Enter" to skip to content

Yac 2.1 升级说明

Yac (Yet Another cache)也是之前我在微博的时候开发的一个为PHP使用的,Lock-free, Shared Memory, User Data Cache,用来替代当时微博在PHP机器上装的本地Memcache, 因为当时的需求特点,最初做了完全无锁的设计,但是这样有一个隐患就是用户有可能获得“错误”的数据,虽然之前的测试概率非常非常低。 关于Yac的设计,可以参考我7年前写的Yac (Yet Another Cache) - 无锁共享内存Cache

作为我的Ya全家桶的重要一员, 在我优化完一轮Yaf, Yar, Yaconf以后,Yac当然也不能少了。

Filed in PHP7, PHP应用, 随笔
with 12 Comments

Yar-2.1 新功能介绍

Yar(Yet Another RPC framework)是一个轻量级支持并行调用的PHP RPC框架,是我还在微博的时候为了优化微博的性能而开发的一个工具,Yar的并行调用在微博被大量应用以降低用户请求耗时。

最近还是因为疫情,我把Yaf,Yaconf都优化了一轮,今天也完成了Yar的优化(事实上,Yar之前写的就还不错,没啥可优化的,哈哈),也新增了俩个能力。我来简单介绍下:

Filed in PHP应用, 转载
with 22 Comments

Yaf-3.1 10%性能提升版

Yaf(Yet Another Framework)是我的第一个发布的PECL扩展,也是我走上PHP内核维护的开始,我一直对它比较有感情,Yaf在过去的8年多时间里,也得到了不少朋友的喜爱,当然Yaf还是有很多不足,但毕竟Yaf主要还是针对性能场景,不能满足所有的需求。

即然Yaf == 性能,借着疫情的在家时间,又花了一些时间对Yaf做了一轮优化,希望能对性能有进一步的提升。

Filed in PHP应用, 随笔
with 18 Comments

Yaconf-1.1 40%速度提升版

Yaconf是一个高性能的PHP配置容器, 它在PHP启动的时候把格式为INI的配置文件Parse后存储在PHP的常驻内存中,不需要每次请求的时候都来分析配置文件,并且在获取配置项的时候"zero-copy",具体的介绍可以看我2015年发布的时候写的介绍:Yaconf - 一个高性能的配置管理扩展

最近因为疫情,我对Yaconf做了一系列的重构,主要是减少取过程中的内存使用,基本重写了整体的逻辑,那性能优化的结果如何呢? 我们来做个简单的测试。

Filed in PHP应用, 随笔
with 9 Comments

PHP FFI详解 - 一种全新的PHP扩展方式

随着PHP7.4而来的有一个我认为非常有用的一个扩展:PHP FFI(Foreign Function interface), 引用一段PHP FFI RFC中的一段描述:

For PHP, FFI opens a way to write PHP extensions and bindings to C libraries in pure PHP.

是的,FFI提供了高级语言直接的互相调用,而对于PHP来说,FFI让我们可以方便的调用C语言写的各种库。

Filed in PHP应用, PHP源码分析
with 27 Comments

Yaf_Loader重构测试

自动加载器在一个大型PHP项目中,往往是最容易被忽视的性能点,因为它一般而言都很简单, 但是它的调用次数确实非常之大。Yaf也不例外,虽然Yaf是C语言写的扩展,但还是可能会占到一个复杂项目1%到3%的耗时,这俩天想了想,总不能天天开会写博客吧,还是写点代码吧?于是乎决定启动重构。:)

经过周末一番重构,我基本上重写了Yaf_Loader::autoload整条生命期, 目的就是降低内存分配,具体的变化可以看:Refactor Yaf_Loader, 效果咋样? 我们来做个简单的测试:

Filed in 随笔
with 6 Comments

深入理解PHP7内核之FAST_ZPP

从PHP7开始,大家可能会发现,不少函数不再使用传统的参数处理方式,而是改用了我们称之为Fast zend parameters parsing(FAST_ZPP)的新型方式, 比如在PHP7之前,count函数是这样的:

PHP_FUNCTION(count)
{
    zval *array;
    long mode = COUNT_NORMAL;

    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z|l", &array, &mode) == FAILURE) {
        return;
    }
    ....
}

在PHP7以后,就变了样了...

Filed in PHP7, PHP源码分析
with 5 Comments