进程、内存、协程

11 篇文章 0 订阅

一、进程

进程:正在运行程序的一个实例
swooole_process->exec

1、创建实例

<?php
/**
 * process.php
 * User chenzhuo
 * Date 2020/8/20 7:17 下午
 * Description :
 */
$process = new swoole_process(function (swoole_process $process){
    //todo
},true);
$pid = $process->start();
echo $pid . PHP_EOL;

2、命令

$ ps aux | grep process.php
$ pstree -p 主进程id
$ ps aft | grep http_server

3、使用场景:

执行10个url

4、解决方案:

  • 引入swoole process
  • 按需开启N个子进程执行

5、代码

<?php
/**
 * curl.php
 * User chenzhuo
 * Date 2020/8/20 7:56 下午
 * Description :
 */

echo "process-start".date("Y-m-d H:i:s");
$urls = [
    'http://baidu.com',
    'http://sina.com.cn',
    'http://qq.com1',
    'http://qq.com2',
    'http://qq.com3',
    'http://qq.com4',
    'http://qq.com5',
    'http://qq.com6',

];
$workers = [];
for($i=0; $i<7; $i++){
    //子进程
    $process = new swoole_process(function (swoole_process $worker) use($i, $urls){
        //curl
        $content = curlData($urls[$i]);
//        echo $content.PHP_EOL;
        $worker->write($content.PHP_EOL);
    },true);
    $pid = $process->start();
    $workers[$pid] = $process;
}

foreach ($workers as $worker){
    echo $worker->read();
}

function curlData($url){
    sleep(1);
    return $url .'success'.PHP_EOL;
}

echo "process-end".date("Y-m-d H:i:s");


二、内存

1、内存操作模块

  • Lock
  • Buffer
  • Table
  • Atomic
  • mmap
  • channel
  • serialize

Swoole Table

  • 基于共享内存和锁实现的超高内存,并发数据结构

2、代码

<?php
/**
 * table.php
 * User chenzhuo
 * Date 2020/8/20 8:20 下午
 * Description :
 */

//创建内存表
$table = new swoole_table(1024);
//内存表增加一列
$table->column('id', $table::TYPE_INT,4);
$table->column('name', $table::TYPE_STRING,64);
$table->column('age', $table::TYPE_INT,4);
$table->create();

$table->set('calm',['id' => 1, 'name' => 'calm', 'age' => 25]);

$calm = $table->get('calm');
print_r($calm);

$table->incr('calm','age',2);
$calm = $table['calm'];
print_r($calm);

3、使用场景

进程间数据共享

三、协程

1、redis

代码

<?php
/**
 * redis.php
 * User chenzhuo
 * Date 2020/8/20 8:37 下午
 * Description :
 */


$http = new swoole_http_server('0.0.0.0',8092);
$http->on('request', function ($request, $response) {

    //获取key输出到浏览器
    $redis = new Swoole\Coroutine\Redis();
    $redis->connect('127.0.0.1','6379');
//    $redis->set('calm','chenz');
    $value = $redis->get($request->get['a']);
    $response->header('Content-Type', 'text-plain');
    $response->end($value);
});

$http->start();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值