可以这么理解。阻塞和非阻塞,应该描述的是一种状态,同步与非同步描述的是行为方式。
1、同步和异步
同步和异步关注的消息通信机制
1、同步:就是在发出一个调用时,在没有得到结果之前,该调用就不返回。但是一旦调用返回,就得到返回值了。
2、异步:调用在发出之后,这个调用就直接返回了,所以没有返回结果。换句话说,当一个异步过程调用发出后,调用者不会立刻得到结果。而是在调用发出后,被调用者通过状态、通知来通知调用者,或通过回调函数处理这个调用。
2、阻塞和非阻塞
阻塞和非阻塞关注的是程序在等待调用结果(消息,返回值)时的状态
1、阻塞调用是指调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才会返回。
2、非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程。
2、非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程。
3、关于同步阻塞 同步非阻塞 异步阻塞 异步非阻塞 网上有一个很好的例子,解释的很清楚
老张爱喝茶,废话不说,煮开水。
出场人物:老张,水壶两把(普通水壶,简称水壶;会响的水壶,简称响水壶)。
1、 老张把水壶放到火上,立等水开。(同步阻塞)
老张觉得自己有点傻
2、 老张把水壶放到火上,去客厅看电视,时不时去厨房看看水开没有。(同步非阻塞)
老张还是觉得自己有点傻,于是变高端了,买了把会响笛的那种水壶。水开之后,能大声发出嘀~~~~的噪音。
3 、老张把响水壶放到火上,立等水开。(异步阻塞)
老张觉得这样傻等意义不大
4、 老张把响水壶放到火上,去客厅看电视,水壶响之前不再去看它了,响了再去拿壶。(异步非阻塞)
老张觉得自己聪明了。
所谓同步异步 是你获得水开了的方式不同。
同步就是烧开水,要自己来看开没开;
异步就是水开了,然后水壶响了通知你水开了。
所谓阻塞非阻塞,说的是你得到结果之前能不能干其他事情。
阻塞是烧开水的过程中,你不能干其他事情(即你被阻塞住了);
非阻塞是烧开水的过程里可以干其他事情。