Code前端首页关于Code前端联系我们

PHP程序员为什么要学习晕厥?

terry 2年前 (2023-09-25) 阅读数 48 #后端开发

什么是swoole

Swoole是一个异步、并行、高性能的PHP网络通信引擎。纯C编写,提供异步PHP多线程服务器、异步TCP/UDP网络客户端、异步MySQL、异步Redis、数据库连接池、AsyncTask、消息队列、毫秒定时器、异步文件读写、异步DNS查询。 Swoole 内置了 Http/WebSocket 服务器/客户端和服务器端。

为什么要使用Swoole

内存常驻,避免重复加载带来的性能损失,提升海量性能

协程异步提升I/O密集型场景(如微信开发、支付、登录)的并发处理能力等。)

方便地开发 Http、WebSocket、TCP、UDP 等可与硬件通信的应用

高性能 PHP 微服务架构已成为现实

常驻内存

目前,传统的PHP框架在处理每个请求之前,需要进行框架和配置文件的加载操作。这可能会成为性能问题的一个重要原因,但是对于Swoole来说,一旦加载一次并使用多次,就不会出现这样的问题。

协程

如下图所示,这是同一个线程处理并发请求的场景。比如需要在接口中调用其他API或者读写大文件。传统同步阻塞和协程异步的优点就显现出来了。

PHP程序员为什么要学习swoole?

说到协程,我们首先要简单说一下进程和线程。众所周知,进程占用大量资源。创建大量进程来处理请求绝对不值得。有许多多线程应用程序。在CPU层面,多个核心将执行多个任务。一旦创建太多线程,线程调度就会丢失。

协程是在单线程基础上实现的,可以最大限度地利用CPU资源,而不会浪费它们等待I/O。当然,协程越多,占用的内存就越多,但这是可以接受的。相对于进程和线程来说,占用的资源相对较小。

使用协程时,遇到读写文件、请求接口等场景时,协程会自动挂起,CPU会分配给其他协程执行任务。这样可以提高单线程CPU资源利用率,减少浪费。从而提高性能。

协程代码示例:


use Swoole\Coroutine as co;

// 协程
$time = microtime(true);
// 创建10个协程
for($i = 0; $i < 10; ++$i)
{
 // 创建协程
 go(function() use($i){
  co::sleep(); // 模拟请求接口、读写文件等I/O
  echo $i, PHP_EOL;
 });
}
swoole_event_wait();
echo 'co time:', microtime(true) - $time, ' s', PHP_EOL;

// 同步
$time = microtime(true);
// 创建10个协程
for($i = 0; $i < 10; ++$i)
{
 sleep(1); // 模拟请求接口、读写文件等I/O
 echo $i, PHP_EOL;
}
echo 'sync time:', microtime(true) - $time, ' s', PHP_EOL;

运行结果:

0
9
8
7
6
5
4
3
2
1
co time:087130069733 s
0
1
2
3
4
5
6
7
8
9
sync time: s

从上面的结果可以看出,协程模式的执行是非顺序的,具有更高的性能。睡眠期间,当前线程的任务执行权将传递给其他例程。

创建HttpService

其实并没有你想象的那么难。查看代码:

$http = new swoole_http_server("", 9501);
$http->on('request', function ($request, $response) {
 $response->end("

嗨 Swoole。 #".rand(1000, 9999)."

");
});
$http->start();

学习 Swoole 需要掌握哪些基础知识

大概是以下这些

  • 了解 Linux 操作系统的进程和线程的概念
  • 了解Linux 中进程切换调度/线程的基础知识
  • 了解管道、UnixSocket、消息队列、共享内存 SOCKET 等进程间通信的基础知识
  • 了解基本的 SOCKET 操作,如接受/连接、发送/接收、关闭、监听、绑定
  • 了解SOCKET接收缓冲区、发送缓冲区、阻塞/非阻塞、超时等概念。IO复用
  • 了解select/poll/epoll事件了解loop和基于select/epoll的reactor模型
  • 了解可读事件和可写事件网络协议 TCP/IP
  • 了解 TCP/IP
  • 了解 TCP 和 UDP 传输协议调试工具
  • 使用 Linux 调试器 gdb
  • 使用 strace 监控进程系统调用
  • 使用 tcpdump 监控网络通信进程
  • 其他 Linux 系统工具,如 ps、lsof、top、vmstat、netstat、sar、ss 等。

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门