• 梳理下我自已对Reactor与及IO多路复用的select\poll\epoll的理解


    Reactor是一种设计思想的落地,其中IO多路复用的具体落地:select\poll\epoll。都是基于Reactor的延伸。它的核心是Reactor与资源处理器。Reactor负责监听与事件的分发,事件包括连接事件、读事件、写事件;资源处理器负责具体事件的处理

    具体的流程是系统调用监听请求,判断请求是连接、读或写。它是非阻塞同步的,这里的非阻塞同步是指,监听请求这个过程非阻塞,

    怎么个非阻塞法?

    通过IO多路复用,用select 或poll或epoll。

    如果是阻塞IO,假定我分配了一个线程来处理100个请求,IO阻塞在第一个请求入口直到请求过来且跑完才切换。如果是非阻塞IO,IO会让系统调用轮询1-100请求入口,哪个请求连接了就处理那个

    非阻塞同步的意思就是通过Reactor的IO多路复用(select或poll或epoll)实现非阻塞监听,然后监听到连接后,将数据从用户态搬运到内核态则是同步,业务处理完将数据从内核移到用户也是同步

    而Proactor则可以既是非阻塞监听也可以异步搬运数据,但linux不支持,windlows倒是支持了。

    至于select。你可以把它看作一个while循环,循环内看有没连接连上,poll则是基于select的一些优化仍然可以看作是while循环。epoll则是异步回调。

    所以总的来说,Reactor先是通过IO多路复用,非阻塞地监听到是否有请求连接过来了,再分发到资源处理器负责处理具体的(连接、读、写)事件。在资源处理器中请求数据由用户态同步到内核或内核同步到用户。

    一些网上总结:

    Redis是单Reactor单进程的

    memcache与netty都是多Reactor与多线程

    nginx是多Reactor多进程

  • 相关阅读:
    skopeo login error
    excel导入导出demo笔记
    使用Transformer实现自动调制识别(RML2016.10a,90%+精度(未调参优化))
    前端vue实现讲师新增和修改功能
    Python机器视觉--OpenCV进阶(核心)--特征检测与匹配基本概念解释
    腾讯云优惠券免费领取入口整理分享
    stream之map的用法
    国产IDE如何获得捐赠和风险投资
    leetcode 48. 旋转图像(对矩阵的对角、左右旋转)
    问题与分类
  • 原文地址:https://blog.csdn.net/h15915793385/article/details/132696331