同步和异步
同步:当一个同步调用发出去后,调用者要一直等待调用结果的返回后,才能进行后续的操作。
异步:当一个异步调用发出去后,调用者不用管被调用方法是否完成,都会继续执行后面的代码。 异步调用,要想获得结果,一般有两种方式:
1、主动轮询异步调用的结果;
2、被调用方通过callback来通知调用方调用结果;
其实总结的话就是:同步和异步是相对服务器端来说的。服务器在受到我们的请求后,如果立刻给我们返回一个响应,哪怕没有返回给我们需要的信息,只是简单的给我们一个相应。那就是异步的。如果是在找到我们需要的资源之后的才给我们响应,那就是同步的。
阻塞和非阻塞
阻塞:调用在发出去后,在消息返回之前,当前进/线程会被挂起,直到有消息返回,当前进/线程才会被激活;
非阻塞:调用在发出去后,不会阻塞当前进/线程,而会立即返回。
总结的话也很简单,阻塞和非阻塞就是就是相对于客户端。当我们向服务器发起了一个Http请求以后,我们是挂起线程然后等待服务器给我们返回结果还是继续干其他的事情,等到服务端找到我们需要的信息以后通知我们,我们再去接收,而不是一直死等。
我记得之前我看过有人举了这样一个例子:
同步阻塞:
就相当于是我们之前烧水,我们要一直在炉子旁边等待水烧开,在水烧开之前我们不能干任何事情,只能等待水烧开,我们才能去干其他的事情。
异步非阻塞:
就相当于我们用了电水壶,我们把水倒进电水壶以后,插上电,然后我们就该去打游戏打游戏,该去学习就学习,完全不影响我们干其他的事情,等水烧开以后,电水壶会发出嗡嗡嗡的警报,来告诉我们水烧开了,快来呀~~然后我们就可以把水晾凉然后喝,或者干一些其他的事情,泡脚等等。
以上就是我对同步喝异步,阻塞和非阻塞的理解,有什么错误的地方,希望小伙伴们在评论区指正~~