展开查看详情
1.Swoole 4.0
PHP
@hantianfeng Rango-
2.一. Go + Chan 全新协程编程模式
二. Swoole 4.0 新版本协程实现原理
三. Swoft 协程框架的使用
3.01 Swoole 4.0
4.• 串行编程
• fun1 要等待 fun2 执行完毕
• 总耗时 2 秒
• 如何实现并发编程?
5. 多进程 多线程
创建 fork pthread_create
回收 wait pthread_join
通信方式 IPC 进程间通信 数据同步/锁
资源消耗 进程切换开销 进程切换开销
并发能力 数百 数千
编程难度 困难 非常困难
6.Coroutine
7. 多进程 多线程 协程
创建 fork pthread_create go
回收 wait pthread_join -
通信方式 IPC 进程间通信 数据同步/锁 array/chan
资源消耗 进程切换开销 进程切换开销 非常低
并发能力 数百 数千 50万
编程难度 困难 非常困难 容易
8.• 并发编程
• fun1 和 fun2 并发执行
• 总耗时 1 秒
9.
10. 创建 Socket
绑定端口并监听
Accept 连接
创建新的协程处理
接收数据并响应
协程退出
11.1. 用户态线程,遇到 IO 主动让出
2. PHP 代码依然是串行执行的,无需加锁
3. 开销极低,仅占用内存,不存在进程/线程切换开销
4. 并发量大,单个进程可开启 50W 个协程
5. 随时随地,只要你想并发,就调用 go 创建新协程
12.
13. SplQueue Chan
new SplQueue new chan()
- 缓存/无缓存
$queue->push $chan->push
$queue->pop $chan->pop
push 永远可用,持续写内存 push 容量不足是挂起协程
pop 无可用数据时返回 false pop 无可用数据时挂起协程
14.1. 数据流转
2. 协程管理
3. 并发依赖管理
4. 多个 chan 可以使用 chan::select 进行读写判断
15.Http 请求
Http 请求
发送响应
16. 协程组件 说明 同步阻塞 API
Co\Socket Socket 的封装 Sockets/Stream
Co\Client TCP/UDP/UnixSocket客户端 Sockets/Stream
Co\Http\Client Http和WebSocket客户端 CURL/file_get_contents
Co\Http2\Client Http2客户端 CURL/GRPC
Co\MySQL MySQL客户端 mysqli/PDO
Co\Redis Redis客户端 redis
Co::sleep 睡眠 usleep/sleep
Co::readFile/Writefile 读写文件 fread/fwrite
17.02 协程实现
18.2.0 setjmp/longjmp
3.0 EG(vm_interrupt)
4.0 libco
19.Swoole 2.0 3.0
1. 不支持 call_user_func, array_map, 魔术方法,反射方法
2. 不支持扩展 zend_call_function
3. 很多第三方库,使用了复杂的设计模式,不可控
20.Swoole 4.0
1. 100% 支持所有 PHP 语法,包括魔术方法、反射、call_func
2. 完整的 C 栈 (基于微信开源的 libco)+ PHP 栈
3. 前置 SysCall Hook,可将 PHP 的同步客户端,如 mysqli/
pdo/file_get_contents/sleep/fread 无缝切换为协程模式
(Swoole 5.0)
21.
22.swoole_coroutine.cc
• co_create
• co_yield
• co_resume
• co_close
23.03 Swoft 框架
24.Swoft
1. 完全基于 Swoole 的纯协程框架
2. Composer 组件化,完全遵循 PSR 规范
3. 依赖注入,容器,组件,连接池,AOP(面向切面编程)
4. 支持 Web 开发、微服务治理
5. Docker 支持
25.
26.Swoft 支持的服务器
1. swoft-http-srever :高并发纯协程 Web 应用程序
2. swoft-websocket-server :长连接通信服务器
3. swoft-rpc-server :微服务治理
27.
28.
29.控制器与 URL 映射
URL 路由
GET 参数映射