两种高效的并发模式
一 半同步/半异步模式
此处的同步和异步不同于I/O当中的同步和异步的概念。此处的“同步”指的是程序的代码完全按照顺序执行,
“异步”指的是程序的执行需要系统事件的驱动。常见的系统事件包括信号和中断等。
按照同步执行的线程叫做同步线程,按照异步执行的线程叫做异步线程。异步线程的执行效率较高,实时性较
强。在半同步/半异步的模式下,同步线程用来执行客户逻辑的处理,相当于逻辑处理单元。异步线程用来进行I/O
事件的处理。异步线程监听到客户请求之后,将其封装成为任务对象,插入到任务队列当中。然后同步模式下的工作
线程来读取并处理该对象。具体哪一个线程来为新的客户请求服务取决于任务队列的设计。
结合两种事件处理模式和几种I/O模型,则半同步/半异步的模式还存在以下的两种变体。
1 半同步/半反应堆模式
该种模式下值含有一个异步线程,该异步线程由主线程来充当。负责监听socket上面的所有事件,当有新的连接到来时,
主线程负责接受连接,并在其内核事件表上注册该描述符的读写事件。如果某个描述符上有读写事件发生,则主线程将该连
接socket加入到任务请求队列当中,让工作线程通过竞争的方式来获取任务。
2 半同步/半异步模式
该中模式下,主线只管理监听socket,连接全部交由工作线程来完成。主线程的监听socket上有了新的连接之后,将返回
的连接描述符分配给某个工作线程。工作线程建立了连接之后,在其内核事件表上注册该描述符的读写事件。主线程一般通过管
道来向工作线程派发socket。该种模式下每个线程都维持着自身的工作循环,在该种模式下,每个线程都处于异步的状态下,因
此不属于严格的半同步/半异步的模式。
二 领导者/追随者模式
领导者/追随者模式下是多个工作线程轮流获得事件源的集合,轮流的监听、分发处理事件的一种模式。在任意一个时间点,程
序都仅有一个领导者线程,它负责监听I/O事件。其他线程均为追随者,他们休眠在线程池当中等待成为新的领导者。当前的领导者线
程如果检测到I/O事件,需要从线程池当中推选出新的领导者线程,然后在进行i/o事件的处理。此时新的领导者等待i/o事件,而原来
的领导者处理i/o事件,从而实现了并发。
领导者/追随者模式主要包含以下几个组件:句柄集、线程集、事件处理器和具体事件处理器。领导者/追随者模式下,领导者线程
自己监听i/o事件并处理客户的请求,因此线程间不需要传递任何的数据,也无需向半同步/半反应堆一样同步对任务队列的访问。领导
者模式下的明显的缺点就是仅支持一个事件源的集合,无法让每个工作线程管理多个客户连接。

浙公网安备 33010602011771号