可以这么理解。阻塞和非阻塞,应该描述的是一种状态,同步与非同步描述的是行为方式。
 
1、同步和异步
  同步和异步关注的消息通信机制
  1、同步:就是在发出一个调用时,在没有得到结果之前,该调用就不返回。但是一旦调用返回,就得到返回值了。 
  2、异步:调用在发出之后,这个调用就直接返回了,所以没有返回结果。换句话说,当一个异步过程调用发出后,调用者不会立刻得到结果。而是在调用发出后,被调用者通过状态、通知来通知调用者,或通过回调函数处理这个调用。
 
2、阻塞和非阻塞
  阻塞和非阻塞关注的是程序在等待调用结果(消息,返回值)时的状态
  1、阻塞调用是指调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才会返回。
  2、非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程。
 
3、关于同步阻塞  同步非阻塞  异步阻塞  异步非阻塞   网上有一个很好的例子,解释的很清楚
 

    老张爱喝茶,废话不说,煮开水。
    出场人物:老张,水壶两把(普通水壶,简称水壶;会响的水壶,简称响水壶)。
    1、 老张把水壶放到火上,立等水开。(同步阻塞)
        老张觉得自己有点傻
    2、 老张把水壶放到火上,去客厅看电视,时不时去厨房看看水开没有。(同步非阻塞)
      老张还是觉得自己有点傻,于是变高端了,买了把会响笛的那种水壶。水开之后,能大声发出嘀~~~~的噪音。
    3 、老张把响水壶放到火上,立等水开。(异步阻塞)
      老张觉得这样傻等意义不大
    4、 老张把响水壶放到火上,去客厅看电视,水壶响之前不再去看它了,响了再去拿壶。(异步非阻塞)
      老张觉得自己聪明了。


      所谓同步异步 是你获得水开了的方式不同。
      同步就是烧开水,要自己来看开没开;

      异步就是水开了,然后水壶响了通知你水开了。
      

      所谓阻塞非阻塞,说的是你得到结果之前能不能干其他事情。
      阻塞是烧开水的过程中,你不能干其他事情(即你被阻塞住了);

      非阻塞是烧开水的过程里可以干其他事情。

          
posted on 2017-11-29 22:34  顺蝈蝈  阅读(212)  评论(0编辑  收藏  举报