PHP多进程奥秘之进程池实现
PHP多进程奥秘之进程池实现
前几天公司分享会,大佬twosee讲了一节《PHP手写多进程服务》,自己也动手实现一下,哈哈哈
进程,啥是进程简单点就是,正在进行的一个过程或者说一个任务。而负责执行该任务的是cpu。
CPU同一时间只能干一件事,但是我们观察到的现象是,多个程序可以同时运行。因为我们的操作系统帮我们设计了一个牛逼的任务调度,采用时间片轮转的抢占式调度方式,正常来说,CPU一个内核一个时间只能干一件事,通过时间片的方式,无感切换执行。
不同系统下的多进程编程每个语言的多进程编程,底层其实都是调用操作系统提供的相关api
Unix
跨平台
PHP实现主要都是通过pcntl函数来进行多进程编程
pcntl_fork
在当前进程当前位置产生分支(子进程)
fork是创建了一个子进程,父进程和子进程都从fork的位置开始向下继续执行,不同的是父进程执行过程中,得到的fork返回值为子进程 号,而子进程得到的是0
子进程与父进程共享程序正文段
子进程拥有父进程的数据空间和堆、栈的副本,注意是副本,不是共享
fork之后,是父进程先执行还是子进程先执行无法确认,取决于系统调度
...
Pimple 浅析
Pimple 浅析
最近项目里面要封装一些composer包,在查询资料的过程中,发现了牛逼的项目,强啊!Github
Pimple官方的介绍就一句话:Pimple - 一个简单的 PHP 依赖注入容器;哈哈哈,果然简介也很简单,接下来看看源码,先从简单的1.x看起
ArrayAccess看pimple的时候,就不得不提到一个常用的接口ArrayAccess,提供像访问数组一样访问对象的能力的接口。
举个例子
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162<?phpclass ArrayAccessObj implements ArrayAccess{ private $container = []; public function __construct() { $this->container = [ ' ...
RabbitMQ 初体验
RabbitMQ 初体验RabbitMQ介绍
MQ是 message queue 的简称,是应用程序和应用程序之间通信的方法。
RabbitMQ是一个由erlang语言编写的、开源的、在AMQP基础上完整的、可复用的企业消息系统。支持多种语言,包括java、Python、ruby、PHP、C/C++等。
AMQP:advanced message queuing protocol ,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息并不受客户端/中间件不同产品、不同开发语言等条件的限制。
实用优点:应用解耦,流量削峰,异步处理
RabbitMQ安装
https://hub.docker.com/_/rabbitmq
自从有了docker,妈妈再也不担心我安装软件啦
为了方便管理docker容器,我们采用compose的方式运行
tips: management版本是带web管理工具的
1、超级简单版本一键启动1docker run -d --name rabbitmq -e RA ...
PHP 扩展包开发流程
PHP 扩展包开发流程
现在程序开发,应该很少人再去造轮子吧,直接github一顿搜,哈哈哈哈。难免有时候会找不到或者不适合,刚好又碰巧这些代码很通用,那么我们不妨自己开发一个轮子 ( 手动狗头 0-0 )
composer安装
Composer 图文安装教程
拓展包的基础结构虽然说扩展包并没有什么强制的规定一定要如何组织代码,但是我们推荐根据业界约定俗成的结构:
123456789101112helper/├── .editorconfig # 编辑器配置文件,比如缩进大小、换行模式等├── .gitattributes # git 配置文件,可以设计导出时忽略文件等├── .gitignore # git 忽略文件配置列表├── .php_cs # PHP-CS-Fixer 配置文件├── README.md├── composer.json # 包定义,很关键├── phpunit.xml.dist├── src # 源码│ └── .gitkeep└── tests ...
神奇的轮子之 - snappy
神奇的轮子之 - snappy起因
因为项目中,需要将多张图片和文字进行拼接生成图片,一开始用GD库,果然难用,哈哈哈
经过不断的努力搜索,发现了神器wkhtmltoimage
原来可以先写好静态html,直接进行转换就好了
但是这个是一个shell脚本,php调用的话,已经有人写好了轮子 knplabs/knp-snappy【pdf和image统统不在话下】
安装1composer require knplabs/knp-snappy
选择安装脚本,直接引用官方说明
wkhtmltopdf binary as composer dependenciesIf you want to download wkhtmltopdf and wkhtmltoimage with composer you add to composer.json:
12$ composer require h4cc/wkhtmltopdf-i386 0.12.x$ composer require h4cc/wkhtmltoimage-i386 0.12.x
or this if you are in 64 ...
【转载】Composer 图文安装教程
Composer 图文安装教程原文地址:
傻瓜都会的 Composer 图文安装教程
Composer 国内全量镜像大全
Composer 不是一个包管理器,不同于python的pi,nodejs的npm,它是 PHP 用来管理依赖(dependency)关系的工具。你可以在自己的项目中声明所依赖的外部工具库(libraries),Composer 会帮你安装这些依赖的库文件。为什么要是用composer呢,或者它有哪些好处呢?它使代码模块化,提高代码的复用性,另外还提供自动加载等。
安装运行 Composer 需要 PHP 5.3.2+ 以上版本,composer 支持windows、linux等多平台。
linux上安装1、执行php -v 查看PHP版本
2、执行以下命令进行全局安装
12curl -sS https://getcomposer.org/installer | phpmv composer.phar /usr/local/bin/composer
composer.phar 是 Composer 的二进制文件。这是一个 PHAR 包(PHP 的归 ...
2020新年快乐
我的2019这一年,过得也是很复杂,跟往年一样复杂
我的2020这一年,或许真的需要再接再厉吧
寄语大家一起加油呀,最初的梦想还记得吗
新年快乐!!!
think-rbac for thinkphp6.0
think-rbac for thinkphp6.0
之前做了一个thinkphp5.1版本的rbac接口管理,最近开始使用thinkphp6.0了,所以就可以开始升级我的rbac啦,哈哈哈
使用
首先用composer安装
1composer require lihq1403/think-rbac:^1.0
发布配置文件
1php think lihq1403:rbac-publish
会生成一个rbac.php的配置文件在config目录下
rbac数据库迁移
1php think lihq1403:rbac-migrate
然后就会发现数据库多了5张表,表字段具体内容可看代码
123456rbac_role 角色 表rbac_user_role 用户角色 中间表rbac_permission_group 权限组 表rbac_permission 权限规则 表rbac_role_permission_group 角色权限组 中间表rbac_log 请求日志 表
thinkphp6里面使用在你需要用到权限的用户model里面,引入RBACUser,参考如下:
...
使用 satis 搭建一个私有的 Composer 包仓库
使用 satis 搭建一个私有的 Composer 包仓库搭建缘由因为国内使用composer的时候,基本上都是用的镜像源,在开发包的时候,完成之后需要进行安装,就会出现一个同步时间差问题,等不及了,就可以先用自己的私有库顶住。当然,有些不公开的包就更需要一个私有的composer仓库了
说动手就动手,看了官方文档,提供了好几种自建方法,我这里只是选择了satis,因为比较简单,哈哈哈
源码安装安装1composer create-project composer/satis --stability=dev --keep-vcs
安装完成,会出现一个satis目录
配置satis的配置是通过satis.json进行的,我们在当前目录新建一个satis.json
123456789101112131415{ "name": "Lihq Private Composer Repository", "homepage": "http://packagist.test", "reposi ...
小破站迁移辛酸史
小破站迁移辛酸史
还不是想体验一把漂亮的主题(是因为穷),哈哈哈
初始方案用到的工具
Typecho
Vps
一开始这样也确实不错,但是太平常了-.-,PHP+MYSQL+NGINX一把梭
现在的方案用到的工具
Hexo + Butterfly
Travis CI
GitHub Pages + Vps
其实现在这样也是内容多多,但是也学到了很多东西呀,主要是用到了自动部署方案,以后只需要专注于写作就ok了
踩坑记录
一开始我是用 GitHub Pages 和 Coding Pages 来部署双节点,用了一天之后,CodingPage就突然发问不了了,Bu和Go了一下,发现CodingPage就突然发问不了了好像确实不咋地,服务不稳定啊,那没办法了,还是部署一套在我的小水管上面吧
我的.travis.yml文件给大家参考一下,主要是推送到github和coding上面,一开始是这方案,后面coding也就没有用了,但是也没删,就放着当备份呗
Vps上面的代码同步采用了WebHook来进行同步
使用 Git Subtree 管理主题版本,这样的话,以后切换主题妈妈就再也不用担心了
在 ...