Yaf

基于Swoole和Redis实现的并发队列处理系统

耗尽温柔 提交于 2021-02-01 20:18:33
背景 由于 PHP 不支持多线程,但是作为一个完善的系统,有很多操作都是需要异步完成的。为了完成这些异步操作,我们做了一个基于Redis队列任务系统。 大家知道,一个消息队列处理系统主要分为两大部分:消费者和生产者。 在我们的系统中,主系统作为生产者,任务系统作为消费者。 具体的工作流程如下: 1、主系统将需要需要处理的任务名称+任务参数push到队列中。 2、任务系统实时的对任务队列进行pop,pop出来一个任务就fork一个子进程,由子进程完成具体的任务逻辑。 具体代码如下: /** * 启动守护进程 */ public function runAction() { Tools::log_message( 'ERROR' , 'daemon/run' . ' | action: restart' , 'daemon-' ); while (true) { $this ->fork_process(); } exit ; } /** * 创建子进程 */ private function fork_process() { $ppid = getmypid(); $pid = pcntl_fork(); if ( $pid == 0 ) { // 子进程 $pid = posix_getpid(); // echo "* Process {$pid} was created nn"

Yaf-3.1 10%性能提升版

时光毁灭记忆、已成空白 提交于 2020-03-23 21:23:10
3 月,跳不动了?>>> 本文地址: https://www.laruence.com/2020/03/15/5563.html 转载请注明出处 Yaf(Yet Another Framework) 是我的第一个发布的PECL扩展,也是我走上PHP内核维护的开始,我一直对它比较有感情,Yaf在过去的8年多时间里,也得到了不少朋友的喜爱,当然Yaf还是有很多不足,但毕竟Yaf主要还是针对性能场景,不能满足所有的需求。 即然Yaf == 性能,借着疫情的在家时间,又花了一些时间对Yaf做了一轮优化,希望能对性能有进一步的提升。 主要涉及到的有: 1. 重构了Yaf_Loader::autoload 2. 重写了Yaf_Route_Static/Rewrite的核心逻辑 3. is_localnamespace采用Hash匹配来取代之前的字符串匹配 4. 重写了大部分的逻辑以避免内存分配 因为改动比较大,所以也跳跃了版本,从3.0.9到3.1.0. 下载地址: Yaf At PECL 那么,还是老规矩,我们来测试下性能变化,首先采用yaf代码中的tools/cg/yaf_cg来生成一个测试: tools/cg/yaf_cg benchmark /var/www/html/yaf 测试服务器配置: 32GB RAM Intel(R) Xeon(R) CPU E5-2620 v2 @ 2

使用SSE2指令集加速字符替换

怎甘沉沦 提交于 2020-03-23 20:59:50
3 月,跳不动了?>>> 本文地址: https://www.laruence.com/2020/03/09/5412.html 转载请注明出处 这个算是一个比较有用的性能优化技巧吧,主要是刚刚在 重构Yaf_Loader 的时候又用到,想着这个操作比较常见,就专门拎出来做个小分享。 我们在写代码的时候,在字符串处理的时候,可能会遇到这样的需求,就是把一个目标字符串中所有出现的某个字符a替换为另外一个字c. 比如对于Yaf_Loader中,在处理命名空间的类名的自动加载的时候,我需要把所有的\替换为_, 一般通常的写法会是: char *pos = class_name; size_t len = class_name_len; while ((pos = memchr(pos, '\\', len - (pos - class_name)))) { *pos++ = '_'; } 而目前SIMD指令的支持已经非常普遍,尤其SSE2,基本当代的CPU都支持, 可以通过cat /proc/cpuinfo来看cpu支持的SIMD指令集: cat /proc/cpuinfo | grep flags flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts

Yaconf-1.1 40%速度提升版

荒凉一梦 提交于 2020-03-23 19:30:49
3 月,跳不动了?>>> 本文地址: https://www.laruence.com/2020/03/12/5521.html 转载请注明出处 Yaconf是一个高性能的PHP配置容器, 它在PHP启动的时候把格式为INI的配置文件Parse后存储在PHP的常驻内存中,不需要每次请求的时候都来分析配置文件,并且在获取配置项的时候"zero-copy",具体的介绍可以看我2015年发布的时候写的介绍: Yaconf - 一个高性能的配置管理扩展 。 Yaconf在微博被大量使用,也稳定运行了这么多年,但是2015年发布后基本也没有什么大的变化。 最近因为疫情,我对Yaconf做了一系列的重构,主要是减少取过程中的内存使用,基本重写了整体的逻辑,那性能优化的结果如何呢? 我们来做个简单的测试。 首先测试配置文件如下: name="yaconf" version="1.1.0" [author] name="Laruence" blog.address="https://www.laruence.com" [developer : author] projects.yaf.repo="https://github.com/laruence/yaf" 测试脚本如下: <?php function bench($key) { $count = 1000000; $start =

使用SSE2指令集加速字符替换

纵饮孤独 提交于 2020-03-20 23:27:58
3 月,跳不动了?>>> 本文地址: https://www.laruence.com/2020/03/09/5412.html 转载请注明出处 这个算是一个比较有用的性能优化技巧吧,主要是刚刚在 重构Yaf_Loader 的时候又用到,想着这个操作比较常见,就专门拎出来做个小分享。 我们在写代码的时候,在字符串处理的时候,可能会遇到这样的需求,就是把一个目标字符串中所有出现的某个字符a替换为另外一个字c. 比如对于Yaf_Loader中,在处理命名空间的类名的自动加载的时候,我需要把所有的\替换为_, 一般通常的写法会是: char *pos = class_name; size_t len = class_name_len; while ((pos = memchr(pos, '\\', len - (pos - class_name)))) { *pos++ = '_'; } 而目前SIMD指令的支持已经非常普遍,尤其SSE2,基本当代的CPU都支持, 可以通过cat /proc/cpuinfo来看cpu支持的SIMD指令集: cat /proc/cpuinfo | grep flags flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts

Yaf-3.1 10%性能提升版

只愿长相守 提交于 2020-03-20 23:27:28
3 月,跳不动了?>>> 本文地址: https://www.laruence.com/2020/03/15/5563.html 转载请注明出处 Yaf(Yet Another Framework) 是我的第一个发布的PECL扩展,也是我走上PHP内核维护的开始,我一直对它比较有感情,Yaf在过去的8年多时间里,也得到了不少朋友的喜爱,当然Yaf还是有很多不足,但毕竟Yaf主要还是针对性能场景,不能满足所有的需求。 即然Yaf == 性能,借着疫情的在家时间,又花了一些时间对Yaf做了一轮优化,希望能对性能有进一步的提升。 主要涉及到的有: 1. 重构了Yaf_Loader::autoload 2. 重写了Yaf_Route_Static/Rewrite的核心逻辑 3. is_localnamespace采用Hash匹配来取代之前的字符串匹配 4. 重写了大部分的逻辑以避免内存分配 因为改动比较大,所以也跳跃了版本,从3.0.9到3.1.0. 下载地址: Yaf At PECL 那么,还是老规矩,我们来测试下性能变化,首先采用yaf代码中的tools/cg/yaf_cg来生成一个测试: tools/cg/yaf_cg benchmark /var/www/html/yaf 测试服务器配置: 32GB RAM Intel(R) Xeon(R) CPU E5-2620 v2 @ 2

Integrating YAF 1.9.5.5 with Azure

旧城冷巷雨未停 提交于 2019-12-25 00:21:56
问题 I have a problem with integrating YAF 1.9.5.5 to azure 'web role'. I successfully added forum to my page and configured config as recommended. <%@ Page MasterPageFile="~/Views/Shared/Site.Master" AutoEventWireup="true" ValidateRequest="false" Inherits="System.Web.Mvc.ViewPage<dynamic>"%> <%@ Register TagPrefix="YAF" Assembly="YAF" Namespace="YAF" %> <asp:Content ID="SupportTitle" ContentPlaceHolderID="TitleContent" runat="server"> Support </asp:Content> <asp:Content ID="SupportContent"

User-friendly URLs for user profiles in YaF

限于喜欢 提交于 2019-12-13 02:45:33
问题 I'm using YAF Framework and want to make the user's profile link to be user-friendly by using their usernames, if username is abdelhady so I want the url to be: www.mysite.com/abdelhady which of course will route back to something like this: www.mysite.com/profile/get/username/abdelhady I've tried something like this, but it didn't work: $config = array( "community" => array( "type" => "rewrite", "match" => "/:username", "route" => array( 'controller' => "profile", 'action' => "get", ) ) );

If seems I have duplicate dll, but I have tried to elimate or then the other… they both are required

泄露秘密 提交于 2019-12-11 21:04:56
问题 Hi I am trying to load/install a software product called "YAF" YetAnotherForum"... it runs great as a standalone, but now I am trying to integrate it in my Sitecore CMS system so that I may utilize the single sign-on features and create an IFrame. in any case, I am making some progress but this is my current error that I cannot seem to get past, any help will be appreciated. Compiler Error Message: CS0433: The type 'YAF.Forum' exists in both 'c:\Windows\Microsoft.NET\Framework64\v4.0.30319

yaf框架使用心得

你离开我真会死。 提交于 2019-12-10 15:05:38
1:php扩展 filp/whoops 错误展示类 composer require filp/whoops 2:打印调试类扩展 composer require symfony/var-dumper 注意版本问题,我这里使用的是php7.2.10 安装的是3.2版本 来源: oschina 链接: https://my.oschina.net/u/3840669/blog/3140773