一、同步与异步:
重点是是否强调事件发生的顺序:请求发出后,是否需要等待请求结果,才能继续执行其他操作。
1. 同步:同步就是发起一个请求,直到请求返回结果之后,才进行下一步操作。简单来说,同步就是必须一件事一件事的做,等前一件做完了,才能做下一件事。
核心:Java主动读写数据,进行IO操作。
2. 异步:当一个异步操作发出后,调用者在没有得到结果之前,可以继续执行后续操作。
核心:Java委托给内核(OS)完成读写操作,并且通知Java读写完成。
二、阻塞与非阻塞:
重点在程序等待结果时的状态:进程/线程需要操作的数据如果尚未就绪,是否妨碍了当前进程/线程的后续操作。
1. 阻塞:在调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才会被唤醒执行后续的操作。
2. 非阻塞:在结果没有返回之前,该调用不会阻塞住当前线程。
三、之间的联系
在处理IO时,阻塞和非阻塞都是同步IO,只有使用了特殊的API才是异步IO。