Swoole进程 內存 协程

微信扫一扫,分享到朋友圈

Swoole进程 內存 协程
0

进程

PHP自带的pcntl,存在很多不足,如:

  • pcntl没有提供进程间通信的功能
  • pcntl不支持重定向标准输入和输出
  • pcntl只提供了fork这样原始的接口,容易使用错误
  • swoole_process提供了比pcntl更强大的功能,更易用的API,使PHP在多进程编程方面更加轻松。

Swoole\Process提供了如下特性:

  • 基于Unix Socketsysvmsg消息队列的进程间通信,只需调用write/read或者push/pop即可
  • 支持重定向标准输入和输出,在子进程内echo不会打印屏幕,而是写入管道,读键盘输入可以重定向为管道读取数据
  • 配合Event模块,创建的PHP子进程可以异步的事件驱动模式
  • 提供了exec接口,创建的进程可以执行其他程序,与原PHP父进程之间可以方便的通信

使用场景

背景

执行多个url

原始方案,同步顺序执行

问题

执行慢

Swoole 优化后

$process = new swoole_process(function(){},true)

$pid = $process->start();
$workers[$pid] = $process

Swoole Table

swoole_table是一个基于共享内存和锁实现的超高性能,并发数据结构

创建内存表

$table = new swoole_table(1024)
$table->column("id",TYPE_INT,4);
$table->column("name",TYPE_STRING,64 );
$table->create();

//设置

$table->set('table'.['id'=>1,'name'=>'yfsama']

//获取
$table->get('table')

//另外一种写法
$table['table'] = [
  'id'=>2,
  'name'=>'rbq',
];

执行完就自动释放,注意

更多食用方法清查看官方文档

协程

案例代码

$redis = new Swoole\Coroutinus\Redis();
$redis->connect("127.0.0.1",6379)
$redis->get('get')

可以通过同步的代码实现异步IO的效果,

在异步操作中如果取mysql需要0.5s redis需要1s那么最终运行时间是1s

咱很菜的,是个智障。 人设非常容易崩。
下一篇

PHP7.3和PHP7.2简单性能对比

你也可能喜欢

发表评论

您的电子邮件地址不会被公开。 必填项已用 * 标注

提示:点击验证后方可评论!

插入图片

排行榜

    抱歉,30天内未发布文章!
返回顶部