PHP APC实现机制

本文介绍了APC如何通过替换PHP的编译函数实现中间代码缓存。APC在启动时会替换zend的编译函数,以此来缓存编译后的中间代码,提高PHP应用程序的性能。

今天简单的查看了下APC的源码,搞清楚了它对php中间代码做缓存的机制,其实很简单,就是在模块启动时,替换了zend的编译函数为APC自己的编译函数。

 源代码如下:
int apc_module_init(int module_number TSRMLS_DC)
{
    /* apc initialization */
#if APC_MMAP
    apc_sma_init(APCG(shm_segments), APCG(shm_size)*1024*1024, APCG(mmap_file_mask));
#else
    apc_sma_init(APCG(shm_segments), APCG(shm_size)*1024*1024, NULL);
#endif
    apc_cache = apc_cache_create(APCG(num_files_hint), APCG(gc_ttl), APCG(ttl));
    apc_user_cache = apc_cache_create(APCG(user_entries_hint), APCG(gc_ttl), APCG(user_ttl));

    apc_compiled_filters = apc_regex_compile_array(APCG(filters));

    /* override compilation */
    old_compile_file = zend_compile_file;  
    zend_compile_file = my_compile_file; //替换编译函数
    REGISTER_LONG_CONSTANT("/000apc_magic", (long)&set_compile_hook, CONST_PERSISTENT | CONST_CS);

    APCG(initialized) = 1;
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值