网络IO模型,及各个web服务使用的类型

网络IO模型

更加详细的解释:https://blog.csdn.net/u013205877/article/details/94228455

同步/异步:关注的是事件处理的消息通信机制,即在等待⼀件事情的处理结果时,被调⽤者是否提供完成通知。

阻塞/⾮阻塞:关注调⽤者在等待结果返回之前所处的状态 阻塞:locking,指IO操作需要彻底完成后才返回到⽤⼾空间,调⽤结果返回之前,调⽤者被挂起,⼲不了别的事情。 ⾮阻塞:nonblocking,指IO操作被调⽤后⽴即返回给⽤⼾⼀个状态值,⽆需等到IO操作彻底完成,最终的调⽤结果返回之前,调⽤者不会被挂起,可以去做别的事
情。

一、同步阻塞型

  程序向内核发送IO请求后⼀直等待内核响应,如果内核处理请求的IO操作不能⽴即返回,则进程将⼀直等待并不再接受新的请求,并由进程轮训查看IO是否完成,完成后进程将IO结果返回给Client,在IO没有返回期间进程不能接受其他客⼾的请求,⽽且是有进程⾃⼰去查看IO是否完成,这种⽅式简单,但是⽐较慢,⽤的⽐较少。

二、同步非阻塞型

  程序向内核发送请IO求后⼀直等待内核响应,如果内核处理请求的IO操作不能⽴即返回IO结果,进程将不再等待,⽽且继续处理其他请求,但是仍然需要进程隔⼀段时间就要查看内核IO是否完成。

三、IO多路复用型

  IO multiplexing就是我们说的select,poll,epoll,有些地⽅也称这种IO⽅式为event driven IO。select/poll/epoll的好处就在于单个process就可以同时处理多个⽹络连接的IO。它的基本原理就是select,poll,epoll这个function会不断的轮询所负责的所有socket,当某个socket有数据到达了,就通知⽤⼾进程。 当⽤⼾进程调⽤了select,那么整个进程会被block,⽽同时,kernel会“监视”所有select负责的socket,当任何⼀个socket中的数据准备好了,select就会返回。这个时候⽤⼾进程再调⽤read操作,将数据从kernel拷⻉到⽤⼾进程。
Apache 的三种工作模式,两种是属于这种工作模式
prefork是此模式的主进程+多进程/单线程+select
work是此模式的主进程+多进程/多线程+poll模式

四、信号驱动型

  程序进程向内核发送IO调⽤后,不⽤等待内核响应,可以继续接受其他请求,内核收到进程请求后进⾏的IO如果不能⽴即返回,就由内核等待结果,直到IO完成后内核再通知进程。

apache event模型就是主进程+多进程/多线程+信号驱动

五、异步非阻塞

  程序进程向内核发送IO调⽤后,不⽤等待内核响应,可以继续接受其他请求,内核调⽤的IO如果不能⽴即
返回,内核会继续处理其他事物,直到IO完成后将结果通知给内核,内核在将IO完成的结果返回给进程,期间进程可以
接受新的请求,内核也可以处理新的事物,因此相互不影响,可以实现较⼤的同时并实现较⾼的IO复⽤,因此异步⾮阻
塞使⽤最多的⼀种通信⽅式。

nginx是异步⾮阻塞。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值