2018-08-06-Python全栈开发day35-事件、IO、select-part3-IO模型
1.IO模型
io的概念:
1.1为什么会发生io
当进行读写操作时,比如读写操作,首先系统需要进行数据的准备(将数据拷贝到内核态),然后将准备好的数据放入进程中进行使用,在此过程中就发生了阻塞
io模型分为四种
- 同步Io
 - 异步io
 - 阻塞io
 - 非阻塞io
 
2.阻塞IO
  
阻塞是用户态内存和内核态内存进行交互的过程。
对于阻塞IO,当用户态内存想收消息recvfrom时,会给内核态内存发一个系统调用,此时内核态内存开始准备数据,在准备数据的过程中,整个进程是属于IO状态也就是阻塞状态的,当内核态内存准备好数据之后,还需要将内核态的内存拷贝到用户态内存,因为用户态内存不能直接调用内核态内存,此时也需要时间,当数据拷贝完成之后,告诉系统整个过程ok
这样就是阻塞io,在整个过程中都是出于阻塞状态,进程利用率低。
3.非阻塞IO
  
和阻塞io相比,非阻塞io在进行系统调用的时候,不是等到内核态数据准备好了之后告诉我才去拷贝数据,而是过一段时间调用一次,看能否拷贝到,如果没有就去做别的事情,
优点:可以优先的提高进程利用效率
缺点:一直进行系统调用,进程消耗高,不能及时响应用户的请求
4.多路复用io
  
流程:和阻塞io相似,但是对于多路复用,可以同时监视多个socket对象,一旦某个socket对象的数据准备好,就告诉进程可以从内核态拷贝数据,相当于完成了多用户
5.异步IO

异步:在系统发起调用之后,进程不理会内核态而去做其他事情,当内核数据准备完成,并且拷贝到用户态之后,发通知给进程,此时进程才开始回来继续完成,在整个过程中没有阻塞。
                    
                
                
            
        
浙公网安备 33010602011771号