分类目录归档:PHP

PHP中协程实现学习笔记

第一部分 什么是协程(Coroutine)

一、概念
0、先来看看Wikipedia Coroutine上的定义(Wikipedia协程中文定义):
Coroutines are computer program components that generalize subroutines for non-preemptive multitasking, by allowing execution to be suspended and resumed。

1、再来看看Wikipedia Routine定义中Coroutine的描述
Coroutine, generalized reentrant computer subroutine having multiple entry points(协程,具有多个入口点的广义可重入计算机子例程
)
继续阅读

PHP中生成器学习笔记

之前的一篇文章我们记录了PHP的迭代器(《PHP迭代器学习笔记》),今天进一步了解下PHP的生成器。

一、什么是生成器
先来看看wikipedia关于generator的定义:
In computer science, a generator is a routine that can be used to control the iteration behaviour of a loop. All generators are also iterators.[1] A generator is very similar to a function that returns an array, in that a generator has parameters, can be called, and generates a sequence of values. However, instead of building an array containing all the values and returning them all at once, a generator yields the values one at a time, which requires less memory and allows the caller to get started processing the first few values immediately. In short, a generator looks like a function but behaves like an iterator.

是不是感觉很抽象,我们先看看他在PHP中的具象呈现,然后再回头反复看看上面的定义,你可能就不会那么困惑了。

0、直观概念
生成器在PHP中直观表现是一个自定义的函数,这个函数的功能是遍历对象,往往也叫生成器函数(generator function)。
继续阅读

PHP操作MySQL设置读写超时实践笔记

前一段时间遇到了一个线上慢查询故障,导致应用返回504, 最终通过优化索引彻底解决了问题。后来就想,可不可以设置一个功能自动降级机制,如果查询时间过长,就自动断开,隐藏相关功能模块。做了一下调查,通过设置MySQL查询超时就可以满足这个自动降级机制。

PDO扩展可以设置读超时,MySQLi可以设置读写超时。

继续阅读

Pthreads扩展实现PHP多线程学习笔记

一、关于pthreads扩展

PHP本身不支持多线程,如果想再CLI模式下实现多线程,需要通过扩展pthreads。pthreads 是一组允许用户在PHP中使用多线程技术的面向对象的API。基于Posix Threads。

注:
POSIX(Portable Operating System Interface)是IEEE为要在各种UNIX操作系统上运行软件,而定义API的一系列互相关联的标准的总称, 也叫可移植操作系统接口

POSIX线程(POSIX threads),简称Pthreads,是线程的POSIX标准。该标准定义了创建和操纵线程的一整套API。在类Unix操作系统(Unix、Linux、Mac OS X等)中,都使用Pthreads作为操作系统的线程。Windows操作系统也有其移植版pthreads-win32。

0、PHP手册说明pthreads
1、github地址
https://github.com/krakjoe/pthreadsgithub中有很多example可以参考。

继续阅读

PCNTL扩展实现PHP多进程学习笔记

第一部分 初识PCNTL扩展

一、介绍

0、PCNTL是PHP进程控制扩展,是PHP源码中自带的扩展,支持实现了Unix方式的进程创建, 程序执行, 信号处理以及进程的中断。(也就是说该扩展不能在Windows下使用)

1、编译安装PHP,在生成编译文件的时候带上–enable-pcntl即可,这样安装PHP中就会有这个扩展。

php -m | grep pcntl
pcntl

继续阅读

PHP迭代器学习笔记

最近碰到了一个问题,PHP中如何遍历对象(迭代对象)。

第一部分 遍历对象

一、问题描述

我们知道foreach可以遍历数组,也可以遍历对象,但是默认情况下只能遍历对象public属性。

class User
{
    public  $name = 'salmonl';
    private $sex  = 'm';
    private $age  = 30;

    public static function getAge()
    {
        return $this->age;
    }
}

$user = new User();
var_dump($user);

foreach ($user as $key => $value) {
    echo $key, '==>', $value, PHP_EOL;
}

继续阅读