IO操作
IO操作是在操作系统的内核进程中进行的,io操作分为两个阶段:
- IO线程发起获取数据请求(数据准备阶段)
- IO线程拿到数据,然后返回给用户进程
操作系统中,内存空间分为用户进程空间和用户进程空间,应用程序的处理都是在用户进程中处理的,当用户进程需要调用IO操作的时候,需要调用操作系统的内核线程处理IO操作。
阻塞IO,非阻塞IO的区别是在用在内核进程中io线程处理的方式的区别:
- 当内核中线程发起IO请求的时候,如果需要等待数据返回,则是阻塞io 否则就是非阻塞IO
同步IO和异步IO 阻塞和非阻塞IO
同步io和异步io: 同步IO/异步IO是在两个线程之间,这两个线程分别是用户进程中的线程即请求线程和内核进程中的线程即接收方线程,当请求线程需要等待接收方线程返回,否则会一直等待的处理方式为同步io,请求方线程不需要等待接收方返回,可以继续做别的事情的处理方式为异步IO
阻塞和非阻塞IO: 阻塞和非阻塞IO指的是同一个线程的不同处理方式,这个线程是在内核线程用来处理io操作的,当内核中的线程发起请求数据的操作,如果等待数据返回则是阻塞IO,否则就是非阻塞IO
四种组合方式
-
同步阻塞方式: 发送方发送请求,需要等待接收方返回信息,才会继续操作。
接收方处理IO操作,需要等待数据返回,才会进一步才做,否则挂起等待。 -
同步非阻塞方式:
发送方发送请求,需要等待接收方返回信息,才会继续操作。
接收方处理IO操作,不需要需要等待数据返回,可以去做别的任务,当数据操作完成后,会利用别的方式调用对应内核线程处理数据,并将数据返回发送方 -
异步阻塞方式: 发送方发送请求,不需要等待接收方返回信息,可以继续处理别的任务
接收方处理IO操作,需要等待数据返回,才会进一步才做,否则挂起等待。 -
异步非阻塞方式: 发送方发送请求,不需要等待接收方返回信息,可以继续处理别的任务
接收方处理IO操作,不需要需要等待数据返回,可以去做别的任务,当数据操作完成后,会利用别的方式调用对应内核线程处理数据,并将数据返回发送方,这种方式效率最高。