• 同步和异步,阻塞和非阻塞


    同步和异步关注的是结果消息的通信机制:(调用方是否需要主动查询结果)

    同步:调用方需要主动等待结果的返回。

    异步:不需要主动等待结果的返回,而是通过其他手段,比如状态通知,回调函数等。

    阻塞和非阻塞主要关注的是等待结果返回时调用方的状态:(调用方是否可以做其他事情)

    阻塞:是指结果返回之前,当前线程被挂起,不做任何事。

    非阻塞:是指结果在返回之前,线程可以做一些其他事,不会被挂起。

    下面用几个简单的例子说明:

    同步阻塞:

    同步阻塞基本也是编程中最常见的模型,打个比方你去商店买衣服,你去了之后发现衣服卖完了,那你就在店里面一直等,期间不做任何事(包括看手机),等着商家进货,直到有货为止,这个效率很低。

    同步非阻塞:

    同步非阻塞在编程中可以抽象为一个轮询模式,你去了商店之后,发现衣服卖完了。
    这个时候不需要傻傻的等着,你可以去其他地方比如奶茶店,买杯水,但是你还是需要时不时的去商店问老板新衣服到了吗。

    异步阻塞:

    异步阻塞这个编程里面用的较少,有点类似你写了个线程池,submit 然后马上 future.get(),这样线程其实还是挂起的。
    有点像你去商店买衣服,这个时候发现衣服没有了,这个时候你就给老板留个电话,说衣服到了就给我打电话,然后你就守着这个电话,一直等着它响什么事也不做。这样感觉的确有点傻,所以这个模式用得比较少。

    异步非阻塞:

    这也是现在高并发编程的一个核心。
    好比你去商店买衣服,衣服没了,你只需要给老板说这是我的电话,衣服到了就打。然后你就随心所欲的去玩,也不用操心衣服什么时候到,衣服一到,电话一响就可以去买衣服了。

  • 相关阅读:
    input框和文字对齐问题
    滚动条位置判断
    【HDOJ】2007平方和与立方和
    POJ3177 Redundant Paths
    POJ3694 Network(tarjan求桥)
    UVA315 Network
    POJ1236 Network of schools
    ZOJ1008 Gnome Tetravex
    ZOJ007 Numerical Summation of a Series(纯数学)
    ZOJ1006 Do the Untwist
  • 原文地址:https://www.cnblogs.com/klvchen/p/9841914.html
Copyright © 2020-2023  润新知