简说SEDA - 分阶段的事件驱动架构

SEDA(Staged Event-Driven Architecture),分阶段的事件驱动架构。

要说SEDA,首先要说一下服务端常用的两种处理模型,多线程处理模型和事件驱动处理模型。

1. 多线程处理模型是每个请求由一个线程全程服务,包括请求解析、业务逻辑、返回给客户端响应,编程模型比较简单,但缺点是如果有长时间的非CPU密集型操作(比如网络、磁盘IO等),会使线程得不到释放,浪费系统资源。

2. 事件驱动模型通常使用非阻塞IO,适合IO密集型的应用,对IO操作的处理流程表现为一个状态机,状态的变化由事件来触发,这就极大的提高了线程对CPU的利用率,所以可以用单线程完成对IO操作的处理。但是业务逻辑怎么办?好像还是要用多线程来完成。

SEDA把对请求处理的整个过程分成多个阶段,每个阶段有自己的线程池,如果每个阶段需要的执行时间差别很大,那么各个阶段的线程池大小也不一样,执行时间长的,线程池可以大些,相反,执行时间短的,线程池可以小些,从统计学上来讲,线程数一定的情况下,分阶段地分配线程池会节约线程资源,提高效率。每个阶段还有自己的事件队列(event queue)和事件handler(event handler)。

SEDA有两种自动调节机制,最常见的也最好理解的是根据事件队列长度调节线程池大小。另外的一个调节是根据事件输出率调节事件的批处理量的大小,这个有点难理解。根据事件队列长度调节线程池大小,如果虽然任务执行得慢,但队列很小,也没必要加大线程池大小。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值