资讯专栏INFORMATION COLUMN

swoole——从入门到放弃(三)

rottengeek / 2573人阅读

摘要:从入门到放弃三一进程子进程创建成功后要执行的函数重定向子进程的标准输入和输出。默认为阻塞读取。是否创建管道,启用后,此选项将忽略用户参数,强制为。

swoole——从入门到放弃(三) 一、进程

swoole_process SwooleProcess

swoole_process::__construct(callable $function, $redirect_stdin_stdout = false, $create_pipe = true);

$function:子进程创建成功后要执行的函数

$redirect_stdin_stdout:重定向子进程的标准输入和输出。启用此选项后,在子进程内输出内容将不是打印屏幕,而是写入到主进程管道。读取键盘输入将变为从管道中读取数据。默认为阻塞读取。

$create_pipe:是否创建管道,启用$redirect_stdin_stdout后,此选项将忽略用户参数,强制为true。如果子进程内没有进程间通信,可以设置为 false

bool swoole_process->exec(string $execfile, array $args)

$execfile指定可执行文件的绝对路径,如 "/usr/bin/php"

$args是一个数组,是exec的参数列表,如 array("test.php", 123),相当与php test.php 123

function swoole_process->start() : int:执行fork系统调用,启动进程

array swoole_process::wait(bool $blocking = true);:回收结束运行的子进程

$result = array("code" => 0, "pid" => 15001, "signal" => 15);

$blocking 参数可以指定是否阻塞等待,默认为阻塞

操作成功会返回一个数组包含子进程的PID、退出状态码、被哪种信号KILL

失败返回false

process小实例
$process = new Swooleprocess(function (swoole_process $pro) {
    // 子进程启用http服务
    $pro->exec("/opt/soft/php/bin/php", [__DIR__ . "/../http/http.php"]);
}, true);

$pid = $process->start();
echo $pid . PHP_EOL;

// 回收进程
$process->wait();
二、内存
swoole_table一个基于共享内存和锁实现的超高性能,并发数据结构。用于解决多进程/多线程数据共享和同步加锁问题。

swoole_table->__construct(int $size, float $conflict_proportion = 0.2)

$size参数指定表格的最大行数,如果不是2的N次方,底层会自动调整为一个接近的数字,如果小于1024,默认为1024

bool swoole_table->column(string $name, int $type, int $size = 0);内存表增加一列

$name指定字段的名称

$type指定字段类型:swoole_table::TYPE_INTswoole_table::TYPE_FLOATswoole_table::TYPE_STRING

$size字符串必须指定长度

function swoole_table->create() : bool;创建内存表

swoole_table->set(string $key, array $value)

$key相同的key会覆盖

$value必须是一个数组

function swoole_table->incr(string $key, string $column, mixed $incrby = 1);原子自增操作

function swoole_table->decr(string $key, string $column, mixed $decrby = 1);原子自减操作

array swoole_table->get(string $key, string $field = null);获取一行数据

bool swoole_table->exist(string $key);检查table中是否存在某一个key

bool swoole_table->del(string $key)删除数据

int function swoole_table->count();返回table中存在的条目数

swoole_table简单的CURD实例
$table = new swoole_table(1024);

$table->column("id", swoole_table::TYPE_INT);
$table->column("name", swoole_table::TYPE_STRING, 16);
$table->column("age", swoole_table::TYPE_INT);

$table->create();

// 第一种设置、获取方式
$table->set("ronaldo", ["id" => 1, "name" => "ronaldo", "age" => 32]);
$table->incr("ronaldo", "age", 2); // 原子自增
$rtn1 = $table->get("ronaldo");
print_r($rtn1);

// 第二种设置、获取方式
$table["ronaldo2"] = ["id" => 2, "name" => "ronaldo2", "age" => 28];
$table->decr("ronaldo2", "age", 2); // 原子自减
$table->del("ronaldo"); // 删除列
$rtn2 = $table["ronaldo2"];
print_r($table["ronaldo"]);
print_r($rtn2);
三、协程
协程可以理解为纯用户态的线程,其通过协作而不是抢占来进行切换。相对于进程或者线程,协程所有的操作都可以在用户态完成,创建和切换的消耗更低。

优势:

开发者可以无感知的用同步的代码编写方式达到异步IO的效果和性能,避免了传统异步回调所带来的离散的代码逻辑和陷入多层回调中导致代码无法维护。

同时由于swoole是在底层封装了协程,所以对比传统的php层协程框架,开发者不需要使用yield关键词来标识一个协程IO操作,所以不再需要对yield的语义进行深入理解以及对每一级的调用都修改为yield,这极大的提高了开发效率。

协程操作redis实例
$http = new swoole_http_server("0.0.0.0", 9501);
$http->on("request", function ($request, $response) {
    
    $redis = new SwooleCoroutineRedis();
    $redis->connect("0.0.0.0", 6379);
    $rtn = $redis->get($request->get["a"]);

    $response->header("Content-Type", "text/plain");
    $response->end($rtn);
});
$http->start();

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/39961.html

相关文章

  • swoole——入门放弃

    摘要:从入门到放弃三一进程子进程创建成功后要执行的函数重定向子进程的标准输入和输出。默认为阻塞读取。是否创建管道,启用后,此选项将忽略用户参数,强制为。 swoole——从入门到放弃(三) 一、进程 swoole_process SwooleProcess swoole_process::__construct(callable $function, $redirect_stdin...

    王笑朝 评论0 收藏0
  • swoole——入门放弃(二)

    摘要:从入门到放弃二一异步毫秒定时器设置一个间隔时钟定时器,与定时器不同的是定时器会持续触发,直到调用清除。是一次性函数,执行完成后就会销毁最大不超过使用定时器来删除定时器。 swoole——从入门到放弃(二) 一、异步毫秒定时器 swoole_timer_tick:设置一个间隔时钟定时器,与after定时器不同的是tick定时器会持续触发,直到调用swoole_timer_clear清...

    awokezhou 评论0 收藏0
  • swoole——入门放弃(二)

    摘要:从入门到放弃二一异步毫秒定时器设置一个间隔时钟定时器,与定时器不同的是定时器会持续触发,直到调用清除。是一次性函数,执行完成后就会销毁最大不超过使用定时器来删除定时器。 swoole——从入门到放弃(二) 一、异步毫秒定时器 swoole_timer_tick:设置一个间隔时钟定时器,与after定时器不同的是tick定时器会持续触发,直到调用swoole_timer_clear清...

    tinyq 评论0 收藏0
  • swoole——入门放弃(一)

    摘要:进程可以使用函数向进程投递新的任务。当前的进程在调用回调函数时会将进程状态切换为忙碌,这时将不再接收新的,当函数返回时会将进程状态切换为空闲然后继续接收新的。当进程投递的任务在中完成时,进程会通过方法将任务处理的结果发送给进程。 swoole——从入门到放弃(一) 一、swoole的源码包安装 下载swoole源码:git clone https://gitee.com/swoole...

    morgan 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<