欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

IO - 同步,异步,阻塞,非阻塞,AIO

程序员文章站 2022-04-14 18:00:18
...
IO - 同步,异步,阻塞,非阻塞

阻塞与非阻塞(进程有没有挂起)
阻塞和非阻塞关注的是程序在等待调用结果(消息,返回值)时的状态.(就是进程有没有被挂起)

阻塞调用是指调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才会返回。
非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程。


同步与异步(调用有没有等待返回结果)
同步和异步关注的是消息通信机制(调用得到的是不是结果(想要的内容),而不是设置状态和操作状态的返回)

所谓同步,就是在发出一个*调用*时,在没有得到结果之前,该*调用*就不返回。但是一旦调用返回,就得到返回值了。
换句话说,就是由*调用者*主动等待这个*调用*的结果。

而异步则是相反,*调用*在发出之后,这个调用就直接返回了,所以没有返回结果。换句话说,当一个异步过程调用发出后,
调用者不会立刻得到结果。而是在*调用*发出后,*被调用者*通过状态、通知来通知调用者,或通过回调函数处理这个调用。


阻塞I/O模型(同步阻塞)

IO - 同步,异步,阻塞,非阻塞,AIO
            
    
    博客分类: Linux IO - 同步异步阻塞非阻塞AIO 

blocking IO的特点就是在IO执行的两个阶段都被block了


非阻塞IO模型(同步非阻塞)

IO - 同步,异步,阻塞,非阻塞,AIO
            
    
    博客分类: Linux IO - 同步异步阻塞非阻塞AIO 

IO执行的第二个阶段被block了


IO复用模型(同步阻塞(但可以同时处理多个IO))

IO - 同步,异步,阻塞,非阻塞,AIO
            
    
    博客分类: Linux IO - 同步异步阻塞非阻塞AIO 

两个阶段都被block了


信号驱动IO(异步)

IO - 同步,异步,阻塞,非阻塞,AIO
            
    
    博客分类: Linux IO - 同步异步阻塞非阻塞AIO 

第二个阶段被block了


异步IO模型(异步非阻塞)

IO - 同步,异步,阻塞,非阻塞,AIO
            
    
    博客分类: Linux IO - 同步异步阻塞非阻塞AIO 

二个阶段没有被block,但占用内存空间较多(因为要准备好数据空间用于内核将数据复制到用户空间)


5个I/O模型的比较

IO - 同步,异步,阻塞,非阻塞,AIO
            
    
    博客分类: Linux IO - 同步异步阻塞非阻塞AIO 



AIO(异步非阻塞IO):
就是在进行IO调用时要准备好数据存放的空间,调用时告诉内核这个空间的地址,当有数据到达时,内核在这个
空间中得到数据或写数据到这个空间,内核读/写好后就发送通知或回调使进程知道这个事。



参考原文件:http://www.cnblogs.com/renxs/p/3683189.html
  • IO - 同步,异步,阻塞,非阻塞,AIO
            
    
    博客分类: Linux IO - 同步异步阻塞非阻塞AIO 
  • 大小: 39.6 KB
  • IO - 同步,异步,阻塞,非阻塞,AIO
            
    
    博客分类: Linux IO - 同步异步阻塞非阻塞AIO 
  • 大小: 62.3 KB
  • IO - 同步,异步,阻塞,非阻塞,AIO
            
    
    博客分类: Linux IO - 同步异步阻塞非阻塞AIO 
  • 大小: 59.4 KB
  • IO - 同步,异步,阻塞,非阻塞,AIO
            
    
    博客分类: Linux IO - 同步异步阻塞非阻塞AIO 
  • 大小: 55 KB
  • IO - 同步,异步,阻塞,非阻塞,AIO
            
    
    博客分类: Linux IO - 同步异步阻塞非阻塞AIO 
  • 大小: 47.8 KB
  • IO - 同步,异步,阻塞,非阻塞,AIO
            
    
    博客分类: Linux IO - 同步异步阻塞非阻塞AIO 
  • 大小: 72.1 KB