• 梳理下我自已对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多进程

  • 相关阅读:
    SpringBoot+Vue项目计算机等级考试报名系统
    HDU 2648:Shopping ← STL map
    centos7安装mysql8
    Serverless入门
    ansible部署MySQL主从
    IntelliJ IDEA 的常用快捷键
    Web3开发框架分析
    【windows权限】提权操作
    怎么把大视频发到微信上?关键时刻很实用!
    从阿里云降价,看中国云计算创新之变
  • 原文地址:https://blog.csdn.net/h15915793385/article/details/132696331