一。进程间通信方式-管道
![](https://img.haomeiwen.com/i3113815/f6d27e3c5b552430.png)
1.管道是一组(2个)特殊的描述符
2.管道需要在fork函数调用前创建
3.如果某一端主动关闭管道,另一端的读取操作会直接返回0
二。进程间通信方式-消息队列
![](https://img.haomeiwen.com/i3113815/2dab1e3f8e94ca05.png)
1.通过指定key创建一个消息队列
2.在消息队列中传递的数据大小限制
3.消息队列会一直保留直到被主动关闭
三。IO多路复用
![](https://img.haomeiwen.com/i3113815/05d68835f3838e2e.png)
- epoll函数会监听注册在自己名下的所有的socket描述符
2.当有socket感兴趣的事件发生时,epoll函数才会响应,并返回有事件发生的socket集合
3.epoll的本质是阻塞IO,它的优点在于能同时处理大量的socket连接
四。Event Loop
![](https://img.haomeiwen.com/i3113815/17103a3b46735678.png)
1.Event Loop是一个Reactor线程,其中运行了一个epoll实例
2.可通过接口添加socket描述符到epoll监听中,并指定事件响应的回调函数
3.Event Loop不可用于FPM环境下
Q:为什么开启了event loop的程序会一直运行不停止?
开启Event Loop后,程序内会启动一个线程并一直阻塞在epoll的监听中,因此不会退出。
Q:如何关闭Event Loop?
调用swoole_event_exit函数即可关闭事件循环(注意,swoole_server程序中此函数无效)
五。Process
![](https://img.haomeiwen.com/i3113815/89c3e558685514da.png)
1.基于C语言封装的进程管理模块,方便PHP的多进程编程
2.内置管道,消息队列接口,可方便实现进程间通信
3.提供自定义信号管理
process实例 动态进程池
1.使用tick函数定时投递任务
2.动态进程池,根据任务执行的多少动态调整内存池大小
需要使用tick定时任务 swoole_process管道通信 event_loop事件循环
网友评论