关于同步/异步/阻塞/非阻塞IO的理解

  1. IO 指的是数据的读写,数据在存储介质或网络上的读写。

  2. 阻塞IO与非阻塞IO 指的是两种读写IO数据的方式,是以对数据读写这个动作 (方法/函数/过程)是否立即返回结果来区分,阻塞不会立即返回结果,这往往会造成当前触发(调用)此动作(方法/函数/过程)的线程挂起(阻塞),非阻塞IO则会立即返回结果(是否读取成功),线程不会被挂起(阻塞)。

  3. 异步IO与同步IO 指的是当前线程是否需要自己处理IO读写的相关过程(IO数据的轮询和复制),同步IO需要当前线程自己处理,而异步IO不需要自己处理,而是将这任务交给操作系统内核,内核创建新的线程去做个任务,任务完成(将IO数据复制到使用异步IO的线程的数据空间)再通知异步IO线程去对数据进行下一步处理。

  4. 同步阻塞IO 指的是使用同步IO的线程自己使用阻塞IO这样的读写数据方式去读写数据,不需要轮询数据是否准备好,因为阻塞IO会阻塞当前线程直到读取到数据并返回。

  5. 同步非阻塞IO 指的是使用同步IO的线程自己使用非阻塞IO这样的读写数据方式去读写数据,由于非阻塞IO不阻塞线程,立即返回读取数据结果,这个结果可能失败可能成功,所以需要当前线程不时轮询这个结果,并在成功的状态下自己再将数据复制到本线程数据空间以便使用。

  6. 异步阻塞IO 指的是使用异步IO的线程自己将IO请求即读写数据的的任务请求给操作系统内核,操作系统内核新建一个线程来完成这个任务,并且这个线程使用阻塞IO方式来读写数据,所以只有这个线程会被阻塞,在读写成功之后,通知使用异步IO的线程自己将数据复制到它的线程数据空间。

  7. 异步非阻塞IO 则更进一步,内核创建的线程使用非阻塞IO来读写数据,并且数据的复制也由一并完成,使用异步非阻塞IO的线程最后只等待操作系统通知它是否可以直接开始使用数据。

发布了18 篇原创文章 · 获赞 6 · 访问量 2435

猜你喜欢

转载自blog.csdn.net/INK_FUNC/article/details/87630442
今日推荐