I/O中的 同步异步,阻塞非阻塞

I/O中的同步和异步的概念和线程中不太一样。

I/O写的时候,默认是写到页高速缓存就返回的,然后异步刷到磁盘上。而同步的I/O指的是改动写到磁盘上之后才会返回结果.可以通过fsync(),和fdatasync()将改动同步到磁盘。或者在open()的时候就指明同步的参数。

而阻塞和非阻塞指的是,在文件没有内容可读的时候(不实EOF)是阻塞等待数据,还是立马返回-1错误

 

直接I/O是同步I/O

 

I/O多路复用支持应用同时在多个文件描述符上阻塞,并在其中某个可以读写时收到通知。

Linux提供了三种I/O多路复用方案:select,poll和epoll,epoll是Linux特有的高级解决方案

 

 

1.同步synchtonied 写到磁盘后返回
2.非同步nonsynchronized 写到页高速缓存就返回
3.同步synchronous 这个概念类似线程 会有个等待写入结果的过程
4.异步 不等待结果直接返回 等待结果通知
3和4都分别有1和2两种情况

阻塞 持续等待未到来的可读数据
非阻塞 发现无可读数据直接返回

nio同步非阻塞 多路复用I/O
同步每个文件描述符的监听到处理到响应是同步的过程
非阻塞 每个被监听的channel必须是非阻塞模式Filechannel无此模式 在发现无数据可读时立即返回 不阻塞轮询线程
nio教学 mq处理从服务器请求

你可能感兴趣的:(I/O中的 同步异步,阻塞非阻塞)