mina and SEDA
It uses non-blocking IO and is an implementation of the staged event driven architecture (SEDA). SEDA makes it possible to have thousands of concurrent network connections.
看到之后,忽然想到,half-sync/half-async 模式其实也可以看成是 SEDA 的一个实现。SEDA 是一个更抽象、更全面的描述,而 half-sync/half-async 模式可以看成是 SEDA 的一个具体的,更有针对性的实现。
SEDA 的论文里有以下这样的描述,这个正是典型的 half-sync/half-async 要解决的问题。
First, the use of threads relaxes the constraint that all event-processing code be non-blocking, allowing an event handler to block or be preempted if necessary. In a traditional event-driven system, all blocking operations must explicitly capture the state of the computation and restore it when the operation completes. In SEDA, threads act as implicit continuations, automatically capturing the execution state across blocking operations.
half-sync/half-async 模式中的层就相当于 SEDA 中的 stag。在 half-sync/half-async 模式中,有一个异步层和同步层;而在 SEDA 中,可以有任意多的 stage,每个 stage 可以是同步的,也可以是异步的。所以可以认为 half-sync/half-async 是 SEDA 的一种简化后的实现。
half-sync/half-async 模式也可以从 生产者/消费者 的角度来描述。
在 spserver 中,同步层和异步层轮流扮演这两个角色。
异步层从 socket 读入数据,然后放到同步层的队列中,这个时候异步层是生产者,同步层是消费者。同步层处理完之后,把输出数据放到异步层的队列中,这个时候同步层是生产者,异步层是消费者。