NIO(四)—— 什么是同步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操作的第一个阶段,在查看数据是否就绪时是如何处理的。

猜你喜欢

转载自guwq2014.iteye.com/blog/2220880