- 快召唤伙伴们来围观吧
- 微博 QQ QQ空间 贴吧
- 文档嵌入链接
- 复制
- 微信扫一扫分享
- 已成功复制到剪贴板
洪斌 - MySQL性能诊断与实践
展开查看详情
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 参数映射