1.阻塞(Block)与非阻塞(Non-Block)
阻塞和非阻塞是进程在访问数据的时候,数据是否准备就绪的一种处理方式。当数据没有准备的时候:
阻塞:往往需要等待缓冲区中的数据准备好过后才处理其它的事情,否则一直等待在那里。
非阻塞:当我们的进程访问我们的数据缓冲区的时候,如果数据没有准备好则直接返回,不会等待。如果数据已经准备好,也直接返回。
2.同步(Synchronization)与异步(Asynchronous)的方式:
同步与异步都是基于应用程序和操作系统处理IO事件所采用的方式。比如
同步:是应用程序要直接参与IO读写的操作。
异步:所有的IO读写交给操作系统去处理,应用程序只需要等待通知。
同步方式处理IO事件的时候,必须阻塞在某个方法上面等待我们的IO事件完成(阻塞IO事件或者通过轮询IO事件的方式)
对于异步来说,所有的IO读写都交给了操作系统。这个时候,我们可以去做其它的事情,并不需要去完成真正的IO操作,
当操作完成IO后,会给我们的应用程序一个通知。
同步:阻塞到IO事件,阻塞到read或者write。这个时候我们就完全不能做自己的事情,让读写方法加入到线程里面,然后阻塞线程来实现,对线程的性能开销比较大。