同步与异步,阻塞与非阻塞

同步与异步

同步与异步主要描述在单线程中,执行者是否具备主动通知功能:

同步: 调用者会等到方法调用返回后才能继续后面的行为

异步: 调用者不需要等到方法返回,方法执行完毕后会主动通知调用者

阻塞与非阻塞

阻塞与非阻塞主要关心调用者的多个线程是否可以同时执行

阻塞: 线程1和线程2不能同时进行

非阻塞: 线程1和线程2可以同时进行

示例

同步阻塞

小明把水壶放到火上,然后在那傻等水开

(客户端请求服务器,在服务器返回前,客户端不执行任何操作)

同步非阻塞

小明把水壶放到火上,然后去客厅看电视,时不时的去厨房看看水开没有

(客户端新开一个线程请求服务器,主线程执行其他操作,同时主线程对请求结果进行轮询,发现收到请求结果后,执行后续操作)

异步阻塞

小明把响水壶放到火上,然后在那傻等水开

(客户端请求服务器,在服务器返回前,客户端不执行任何操作,服务器返回时,通过回调通知客户端执行后续操作)

异步非阻塞

小明把响水水壶放到火上,去客厅看电视,水壶响之前不再去看它了,响了再去处理

(客户端新开一个线程请求服务器,主线程执行其他操作,服务器返回时,调用回调客户端的回调接口通知主线程执行特定操作)