面试官:swoole 的认识和强大之处你不知道?回去吧!!!

首先 swoole 是 php 的一个扩展程序

swoole 是一个为 php 用 c 和 c++ 编写的基于事件的高性能异步 & 协程并行网络通信引擎

swoole 是一个多进程模型的框架,当启动一个进程 swoole 应用时,一共会创建 2+n+m 个进程,n 为 worker 进程数,m 为 TaskWorker 进程数,1 个 master 进程和一个 manager 进程,关系如下图所示

Master 进程为主进程,该进程会创建 Manager 进程、Reactor 线程等工作进 / 线程

面试官:swoole 的认识和强大之处你不知道?回去吧!!!_第1张图片

1、Reactor 线程:

  • 负责维护客户端 TCP 连接、处理网络 IO、处理协议、收发数据

  • 完全是异步非阻塞的模式

  • 全部为 C 代码,除 Start/Shudown 事件回调外,不执行任何 PHP 代码

  • TCP 客户端发来的数据缓冲、拼接、拆分成完整的一个请求数据包

  • Reactor 以多线程的方式运行

2、Worker 进程:

  • 接受由 Reactor 线程投递的请求数据包,并执行 PHP 回调函数处理数据

  • 生成响应数据并发给 Reactor 线程,由 Reactor 线程发送给 TCP 客户端

  • 可以是异步非阻塞模式,也可以是同步阻塞模式

  • Worker 以多进程的方式运行

3、TaskWorker 进程 :

  • 接受由 Worker 进程通过 swoole_server->task/taskwait方法投递的任务

  • 处理任务,并将结果数据返回(使用 swoole_server->finish)给 Worker 进程

  • 完全是同步阻塞模式

  • TaskWorker 以多进程的方式运行

A: 网络通信引擎

网络通信引擎,是为 php 提供网络通信能力的,传统的 php 程序都是启动 php-fpm,前边再有一层 nginx 或者 apache,打开浏览器访问就 OK,但是从浏览器访问到服务器这一阶段涉及到了网络强求,但是这一阶段跟 php 脚本没有任何的关系,php 只需要处理好数据生成需要展示的内容就完成使命了,声明周期当中,请求到来前和请求完成后都没有 php 脚本什么事,而 swoole 提供的一大能力就是扩展了 php 的生命周期,无需 php-fpm 或者 nginx 或者 apache 之类的工具帮助就可以启动一个 web 服务,并且从服务启动前,启动后,链接进入,请求到来,请求结束,链接切断,服务终止都在 php 脚本的掌控之中,这样的话 php 脚本就会涉及到大量的网络通讯处理,而这个网络通讯处理的能力正是来源于 swoole! 网络通信引擎,是为 php 提供网络通信能力的,传统的 php 程序都是启动 php-fpm,前边再有一层 nginx 或者 apache,打开浏览器访问就 OK,但是从浏览器访问到服务器这一阶段涉及到了网络强求,但是这一阶段跟 php 脚本没有任何的关系,php 只需要处理好数据生成需要展示的内容就完成使命了,声明周期当中,请求到来前和请求完成后都没有 php 脚本什么事,而 swoole 提供的一大能力就是扩展了 php 的生命周期,无需 php-fpm 或者 nginx 或者 apache 之类的工具帮助就可以启动一个 web 服务,并且从服务启动前,启动后,链接进入,请求到来,请求结束,链接切断,服务终止都在 php 脚本的掌控之中,这样的话 php 脚本就会涉及到大量的网络通讯处理,而这个网络通讯处理的能力正是来源于 swoole!

B:基于事件的高性能异步

同步:

在这里插入图片描述

就拿读取文件内容来说吧

file_get_contents () 执行完才能执行下边的代码 这样就很容易造成程序的阻塞

否则下边的代码就无法输出文件的内容

传统 php 都是这样阻塞式的顺序执行的

这是常见的同步编程

异步:

面试官:swoole 的认识和强大之处你不知道?回去吧!!!_第2张图片

代码在执行到 ajax 的时候,函数会直接返回,你马上就可以看到屏幕上打印出的 lol

这就是异步,这样你永远不会被 IO 阻塞ÿ

你可能感兴趣的:(进阶PHP月薪30k,编程语言,php,swoole,面试)