太原网站建设方案推广,企业网站创建小结,建网站哪家好行业现状,黑wordpress网站Reactor是一种设计思想的落地#xff0c;其中IO多路复用的具体落地#xff1a;select\poll\epoll。都是基于Reactor的延伸。它的核心是Reactor与资源处理器。Reactor负责监听与事件的分发#xff0c;事件包括连接事件、读事件、写事件。
具体的流程是系统调用监听请求…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多进程