参考文献
什么是reactor模型:https://www.cnblogs.com/52php/p/5701354.html
php代码下载:https://github.com/mailjobblog/dev_php_io/tree/master/test/reactor
图解reactor模型:https://blog.csdn.net/weixin_39724469/article/details/111295927
Reactor介绍
connection per thread
在BIO线程模型中,为了解决同步阻塞的问题,采用了多线程的方式处理并发,即经典的connection per thread,每一个连接用一个线程处理。虽然在单个线程内仍然是阻塞的,但在整体上看是可以同时处理多个连接请求的,原理图如下:
但这种方式的缺点在于资源要求太高,系统中创建线程是需要比较高的系统资源的,如果连接数太多,系统无法承受,而且,线程的反复创建和销毁也需要代价。
Reactor线程思想
为了解决这个问题,出现了Reactor线程模型。简单来说,Reactor线程模型就是多路I/O复用
结合线程池
的思想。
- I/O多路复用:多个连接共用一个阻塞对象(即下图中的ServiceHandler),应用程序只需要在一个阻塞对象等待,无需阻塞等待所有连接,当某个连接有新的数据可以处理时,操作系统通知应用程序线程从阻塞状态返回,并将数据分发给对应的线程处理
- 基于线程池复用线程资源:不必再为每个连接创建线程,将连接完成后的业务处理任务交给线程池中的线程处理,处理完成后归还线程,同一个线程可以处理多个连接的业务,达到线程复用