Linux网络编程 - 子线程使用poll处理连接 I/O事件(高并发高性能进阶篇)
这一篇我们就将 acceptor 上的连接建立事件和已建立连接的 I/O 事件分离,形成所谓的 主 - 从 reactor 模式 。 主 - 从 reactor 模式 主 - 从这个模式的核心思想是,主反应堆线程只负责分发 Acceptor 连接建立,已连接套接字上的 I/O 事件交给 sub-reactor 负责分发。其中 sub-reactor 的数量,可以根据 CPU 的核数来灵活设置 。 多个反应堆线程同时在工作,这大大增强了 I/O 分发处理的效率,并且同一个套接字事件分发只会出现在一个反应堆线程中,这会大大减少并发处理的锁开销。 来解释一下这张图,我们的 主反应堆线程一直在感知连接建立的事件 ,如果有连接成功建立,主反应堆线程 通过 accept 方法获取已连接套接字 ,接下来会 按照一定的算法 选取一个从反应堆线程,并 把已连接套接字加入到选择好的从反应堆线程中 。 主反应堆线程唯一的工作,就是调用 accept 获取已连接套接字,以及将已连接套接字加入到从反应堆线程中。不过,这里还有一个小问题,主反应堆线程和从反应堆线程,是 两个不同的线程,如何把已连接套接字加入到另外一个线程中呢 ?这是高性能网络程序框架要解决的问题,在后面,将会给出这个问题的答案。 主 - 从 reactor+worker threads 模式 如果说主 - 从 reactor 模式解决了 I