reactor模型简介

单线程Reactor

reactor线程负责多路分离套接字,accept新连接,dispatch分派请求到Handler处理器中,所有操作都在一个线程中。

缺点:

  • 单线程模型是串行的,当其中某个handler阻塞时, 其他client的handler得不到执行,无法接收新的client请求。
  • 单线程模型不能充分利用多核资源。

wpsC345.tmp

多线程的Reactor

reactor是一个独立线程,如果要利用多核优势,可以将reactor拆分成多个线程;handler由线程池中的线程执行。

优点

  • 编程简单,可以最大程度避免复杂的多线程及同步问题
  • 响应快,不会因为单个handler同步操作而阻塞阻塞,虽然Reactor本身依然是同步的
  • 使用线程池,避免了多线程/进程的切换开销
  • 可扩展性,可以方便的通过增加Reactor实例个数来充分利用CPU资源
  • 可复用性,reactor框架本身与具体事件处理逻辑无关

缺点

  • 相比传统的简单模型,Reactor增加了一定的复杂性,有一定的门槛,不易调试
  • Reactor模式需要底层的Synchronous Event Demultiplexer支持,比如Java中的Selector支持,操作系统的select系统调用支持
  • Reactor模式在IO读写数据时还是在同一个线程中实现的,即使使用多个Reactor机制的情况下,那些共享一个Reactor的Channel如果出现一个长时间的数据读写,会影响这个Reactor中其他Channel的相应时间,比如在大文件传输时,IO操作就会影响其他Client的相应时间,因而对这种操作,使用传统的Thread-Per-Connection或许是一个更好的选择,或则此时使用改进版的Reactor模式如Proactor模式

 

wpsC376.tmp

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值