分享

高性能WEB服务器和I/O设计模式

 WindySky 2017-08-29

高性能web服务器的关键在于如何处理数据I/O,下面是05年的一篇老文章,主要讲解了同步/异步,阻塞/非阻塞的概念以及Reactor/Proactor I/O设计模式。

http://www./articles/io_design_patterns.html


概括而言,

1、同步/异步的概念区别在于I/O操作由谁发起,如果由用户进程/线程发起则为同步,如果由OS完成然后通过回调机制通知用户进程,则为异步;

2、阻塞/非阻塞的概念区别在于所调用的系统函数,阻塞模式下,用户进程只能等待,非阻塞模式下,用户进程可以处理其他请求;

3、Reactor是反应器模式,系统通知数据可读,用户进程进行实际的I/O读取操作,是一种同步模式;Proactor则为前置处理器模式,OS全权负责处理I/O读取操作,完成后通知用户进程,用户进程只需要在预设的用户缓存空间中处理数据,是一种异步模式。Proactor的实现依赖于OS实现高效的异步I/O API。在Linux系统上,Reactor模式实现效果更好。nginx就是用Reactor模式来实现的,进程(单线程),不需要考虑线程同步/context切换的开销,同时可为多核系统fork多个进程/任务,有很高的并发处理能力;

4、使用事件分离器(event demultiplexor)来达到I/O多路复用的目的,用户进程注册感兴趣的事件,事件分离器把来自多个事件源的事件分发给各自的事件处理器,也就是Register/Dispatcher/Handler的模式。



    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多