PHP程序员为什么要学习晕厥?
什么是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或者读写大文件。传统同步阻塞和协程异步的优点就显现出来了。
说到协程,我们首先要简单说一下进程和线程。众所周知,进程占用大量资源。创建大量进程来处理请求绝对不值得。有许多多线程应用程序。在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前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。