最近在研究Swoole,Swoole选用了典型的Reactor模式处理并发。本文对并发处理的典型方法做一个说明。与swoole本身关系不大。
之后关于swoole会有PHP如何处理多进程/多线程,swoole扩展解决什么问题的讨论。
0 概述
服务器端程序,一个常见的问题就是要处理大量并发连接。处理并发,有一些典型的方案,例如:
多进程|多线程
IO复用
多进程|多线程与IO复用组合
1 多进程|多线程
最早的并发解决方案应该是多进程,从 Unix 系统诞生就开始有了进程的概念。服务器每当接收到客户端的连接就创建一个进程(fork()
),用于完成接收请求accept
,读数据read
,处理process
,写数据write
,根据是否需要选择执行关闭[close]
。多进程模式又很麻烦的问题,例如进程间通讯IPC
(管道、消息队列、共享内存等)、进程的销毁创建和切换都是很耗资源的,因此并发量再大的时候,不能胜任。
之后又出现了多线程,与进程相比线程量级更轻,而且线程间是共享内存堆栈的,所以线程间通信更容易。但同样系统OS管