@elibinary
2017-01-21T04:38:16.000000Z
字数 870
阅读 636
Pattern
Reactor Pattern,即反应器模式,它是一种为处理服务请求并发的事件设计模式。当接收到请求后,服务处理程序会将请求调度到相对应的处理程序,从概念上讲它主要有四个结构组成:
正常的一个普通 Ruby Process 的执行方式是接收到一个请求,如果这个请求有读写数据库或其他磁盘IO操作,那么这个process就会停下来等待IO操作完成后再进行接下来的处理,这期间该 process 其实是处于 sleeping 状态的,这就造成了计算资源的极大浪费,你会发现明明 CPU 资源还有很多空余,但是 request 的处理量却始终上不去。
就目前而言,web application 多是 IO 密集型的操作,计算密集型的操作只有很少一部分,IO Blocking 是限制 server 效率的最大瓶颈。那么换一种思路,为什么不在等待 IO 操作的空闲期去处理其他的 request 呢,这也就是 Reactor Pattern 解决 IO Bocking 的方式,它通过一个 Single thread 的 event loop 不停的循环等待新的 request 事件,如果事件处理中有 IO Blocking,就把这个动作丢给另外的 thread 去做,自身不被阻塞并能够继续处理其他请求,等到 IO 操作完成再通过 callback 将资源回传至 event loop。