swoole_process源码解析
swoole提供的用于操作进程的扩展库,用来替代PHP的pcntl扩展。
lcli
这个作者很懒,什么都没留下…
展开
-
swoole_process源码分析之process创建过程
swoole提供了创建进程的方式,据swoole官方文档介绍,比PHP原生的pcntl更高效,下面是官方文档给出的pcntl的缺点和swoole的优点。PHP自带的pcntl,存在很多不足,如pcntl没有提供进程间通信的功能 pcntl不支持重定向标准输入和输出 pcntl只提供了fork这样原始的接口,容易使用错误 swoole_process提供了比pcntl更强大的功能,更易...原创 2018-09-29 22:55:19 · 1007 阅读 · 0 评论 -
swoole_process源码分析之进程start过程
前一篇文章我们分析了进程的构造过程,这篇我们开始分析其start过程,start通过执行底层fork系统调用,启动进程,在PHP侧的执行原型如下:$pid = $process->start();函数执行成功,则返回子进程的PID,执行失败返回false。可以通过$process->pid和$process->pipe分别获取子进程的PID和管道的文件描述符,而在sta...原创 2018-10-01 07:15:25 · 339 阅读 · 0 评论 -
swoole_process源码分析之进程的exec过程解析
swoole_process的exec是exec系统调用的封装,用于执行外部的一个程序,其使用实例如下:bool swoole_process->exec(string $execfile, array $args)$execfile指定可执行文件的绝对路径,如 "/usr/bin/python"$args是一个数组,是exec的参数列表,如 array('test.py', 12...原创 2018-10-01 23:15:02 · 645 阅读 · 0 评论 -
swoole_process源码分析之进程的wait流程
swoole_process的wait操作用于回收结束运行的子进程,其调用原型为:array swoole_process::wait(bool $blocking = true);$result = array('code' => 0, 'pid' => 15001, 'signal' => 15);$blocking 参数可以指定是否阻塞等待,默认为阻塞操作成功会...原创 2018-10-01 23:34:30 · 679 阅读 · 0 评论 -
swoole_process源码分析之消息队列创建
swoole_process创建的进程默认在父子进程间通过管道的方式进行进程间通信方式,而swoole_process也提供消息队列的方式进行进程间通信,对外和队列相关的接口有创建队列、push消息、pop消息、stat消息、销毁队列等,我们下面逐步分析。启用队列的操作如下:bool swoole_process->useQueue(int $msgkey = 0, int $mo...原创 2018-10-02 15:02:52 · 411 阅读 · 0 评论 -
swoole_process源码分析之push队列
前面我们分析过了队列的创建过程,这里我们看下队列的push流程,其push调用形式如下。bool swoole_process->push(string $data);下面我们看下底层实现。static PHP_METHOD(swoole_process, push){ char *data; zend_size_t length; //messa...原创 2018-10-02 15:10:48 · 342 阅读 · 0 评论 -
swoole_process源码分析之pop队列
用于从队列中读取消息,其调用如下:string swoole_process->pop(int $maxsize = 8192);下面我们分析下其流程。static PHP_METHOD(swoole_process, pop){ long maxsize = SW_MSGMAX; //解析输入参数,输入参数就一个maxsize,表示要读取的最大消...原创 2018-10-02 15:30:03 · 433 阅读 · 0 评论 -
swoole_process源码分析之查询队列状态
swoole_process提供的statQueue用于统计队列状态,其返回一个数组,里面包括了消息总个数和总的字节数。array swoole_process->statQueue();下面我们看看其实现。static PHP_METHOD(swoole_process, statQueue){ swWorker *process = swoole_get_obj...原创 2018-10-02 16:30:45 · 335 阅读 · 0 评论 -
swoole_prcess源码分析之队列销毁
删除队列。此方法与useQueue成对使用,useQueue创建队列,使用freeQueue销毁队列。销毁队列后队列中的数据会被清空。如果程序中只调用了useQueue方法,未调用freeQueue在程序结束时并不会清除数据。重新运行程序时可以继续读取上次运行时留下的数据。系统重启时消息队列中的数据会被丢弃。其在PHP侧的调用如下。function swoole_process->...原创 2018-10-02 16:39:19 · 297 阅读 · 0 评论 -
swoole_process源码分析之read操作
swoole_process提供的read方法用于从管道中读取数据,其使用刑形式如下。function swoole_process->read(int $buffer_size=8192)$buffer_size是缓冲区的大小,默认为8192,最大不超过64K 管道类型为DGRAM数据报时,read可以读取完整的一个数据包 管道类型为STREAM时,read是流式的,需要自行...原创 2018-10-02 17:09:36 · 443 阅读 · 0 评论 -
swoole_process源码分析之write操作
swoole_process提供的write方法用于向管道内写入数据,其使用的形式如下。int swoole_process->write(string $data);$data的长度在Linux系统下最大不超过8K,MacOS/FreeBSD下最大不超过2K 在子进程内调用write,父进程可以调用read接收此数据 在父进程内调用write,子进程可以调用read接收此数...原创 2018-10-02 20:58:29 · 567 阅读 · 0 评论 -
swoole_process源码分析之setTimeout操作
swoole_process提供的setTimeOut用于设置管道读写操作的超时时间,其操作方式如下:function swoole_process->setTimeout(double $timeout)$timeout单位为秒,支持浮点型,如1.5表示1s+500ms 设置成功返回true 设置失败返回false,可使用swoole_errno获取错误码下面我们分析下其执...原创 2018-10-02 21:14:16 · 291 阅读 · 0 评论 -
swoole_process源码分析之setBlocking操作
swoole_process提供的setBlocking用于设置管道是否为阻塞模式。默认Process的管道为同步阻塞。function swoole_process->setBlocking(bool $blocking = true);$blocking 布尔型,默认为true,设置为false时管道为非阻塞模式下面我们看看其实现。static PHP_METHOD(...原创 2018-10-02 21:41:40 · 356 阅读 · 0 评论 -
swoole_process源码分析之kill操作
swoole_process提供的kill操作用于向指定pid进程发送信号。bool swoole_process::kill($pid, $signo = SIGTERM);默认的信号为SIGTERM,表示终止进程 $signo=0,可以检测进程是否存在,不会发送信号下面我们看下其流程。static PHP_METHOD(swoole_process, kill){ ...原创 2018-10-02 21:53:50 · 1082 阅读 · 0 评论 -
swoole_process源码分析之daemon过程
swoole_process提供的daemon用于使当前进程蜕变为一个守护进程。//低于1.9.1的版本bool swoole_process::daemon(bool $nochdir = false, bool $noclose = false);//1.9.1或更高版本bool swoole_process::daemon(bool $nochdir = true, bool $...原创 2018-10-03 09:55:40 · 491 阅读 · 0 评论 -
swoole_process源码分析之alarm操作
swoole_process提供的alarm是个高精度定时器,是操作系统setitimer系统调用的封装,可以设置微秒级别的定时器。定时器会触发信号,需要与swoole_process::signal或pcntl_signal配合使用。function swoole_process::alarm(int $interval_usec, int $type = ITIMER_REAL) : b...原创 2018-10-03 11:47:52 · 607 阅读 · 1 评论 -
swoole_process源码分析之设置CPU亲和性
swoole_process提供的setAffinity用于设置CPU亲和性,可以将进程绑定到特定的CPU核上。function swoole_process::setAffinity(array $cpu_set);接受一个数组参数表示绑定哪些CPU核,如array(0,2,3)表示绑定CPU0/CPU2/CPU3 成功返回true,失败返回false下面我们分析下其流程。...原创 2018-10-04 10:55:07 · 469 阅读 · 0 评论 -
swoole_process源码分析之close操作
swoole_process提供的close用于关闭创建的好的管道。bool swoole_process->close(int $which = 0);$which 指定关闭哪一个管道,默认为0表示同时关闭读和写,1:关闭写,2关闭读下面我们看下其流程。static PHP_METHOD(swoole_process, close){ long which =...原创 2018-10-04 11:06:44 · 333 阅读 · 0 评论 -
swoole_process源码分析之退出子进程操作
swoole_process提供的exit用于退出子进程,int swoole_process->exit(int $status=0);$status是退出进程的状态码,如果为0表示正常结束,会继续执行PHP的shutdown_function,其他扩展的清理工作。 如果$status不为0,表示异常退出,会立即终止进程。不再执行PHP的shutdown_function,其...原创 2018-10-04 11:39:01 · 927 阅读 · 0 评论 -
swoole_process源码解析之对象析构
swoole_process提供了__destruct方法,用于释放swoole内部对象资源,这个会在swoole_process对象释放时调用。我们看下其流程。static PHP_METHOD(swoole_process, __destruct){ swWorker *process = swoole_get_object(getThis());//获取swoole内部对...原创 2018-10-04 14:12:54 · 211 阅读 · 0 评论