【六星教育-swoole-1911 swoole进阶-05swoole结构与进程函数】

前言

上节课,主要是说到tcp的问题及其解决方法,进程与线程的概念。问题解决方法主要是用到包头+包体的方式。

进程、线程、协程概念及关系

一个运行的程序是依赖于一个进程的,但是进程的资源消耗比较大,这个时候就需要线程来处理,一个进程可以有多个线程,但是线程有个缺点:运行状态需要切换。运行状态:初始化=》运行开始=》运行中=》阻塞=》销毁。完成多个任务,我们可以开启多个进程,但是多个进程资源消耗大,这个时候我们就开启多个线程来完成,但是多线程状态需要切换,实际上多线程并不是真正的多个线程并行同时运行,而是以察觉不到的线程切换,来实现多线程的,这个时候就诞生了协程,协程依赖于线程,那多个协程就帮助多个线程完成多个任务。协程是可以利用线程的切换状态的阻塞时间去做一些事情的。协程特点:切换速度最快的,资源消耗最小的。协程和线程是共存的,线程的生命周期:从线程开启到线程关闭结束,协程和线程都是共存的,线程结束,协程也结束,协程利用下一个线程状态切换的时间去做其他的事。线程状态切换 对于程序来说是慢的,因为线程需要初始化=》变成运行状态=》销毁(这一过程是linux内核处理)。协程:轻量级 ,切换快,协程运行的任务不能是阻塞的。整个过程就是充分利用电脑的资源

swoole的面向对象的写法

class Http{

protected $http;

protected $event = [

'request',

];

public function __construct($ip,$port)

{

//生成对象

扫描二维码关注公众号,回复: 8332653 查看本文章

$this->http = new Swoole\Http\Server($ip,$port);

echo $ip.":".$port."\n";

$this->onEvent();

}

//注册事件方法

public function onEvent()

{

foreach ($this->event as $v)

{

$this->http->on($v,[$this,$v]);

}

}

//request事件

public function request($request,$response)

{

var_dump($request->get, $request->post);

$response->header("Content-Type", "text/html; charset=utf-8");

$response->end("<h1>Hello Swoole. #".rand(1000, 9999)."</h1>");

}

//开启服务

public function start()

{

$this->http->start();

}

}

$http = new Http('0.0.0.0',9501);

$http->start();

swoole结构

ps -aux | grep 进程名

pstree -a | grep 进程名

master进程主要是监听swoole的核心事件,并驱动事件,同时又包含主线程和reactor线程组。主线程:监听服务的socket套接字有没有连接进来,还会对线程组去做一个评估,做一个类似负载操作。线程组(多个):主线程监听线程组来分发对应的请求。

负载均衡:很多个请求,通过nginx 分发到不同的服务器,来减轻服务器压力。

生活案例:客服电话。

主进程还做心跳检测,udp数据。

swoole运行流程

swoole_set_process_name() 修改进程名函数

网络io模型

猜你喜欢

转载自www.cnblogs.com/fish-minuet/p/12108190.html