同步和异步关注的是消息通信机制 (过程) | |
同步 | 异步 |
发送方调用某个东西,发送方得等待这个调用返回结果才能继续往后执行 | 发送方调用某个东西,发送方不会等结果,而是在调用发出后,发送方可继续执行后续操作,接收方通过状体来通知发送方,或者通过回掉函数来处理这个调用 |
| |
阻塞和非阻塞 强调的是程序在等待调用结果(消息,返回值)时的状态 | |
阻塞 | 非阻塞 |
指调用结果返回之前,当前线程会被挂起。 | 在不能立刻得到结果之前,该调用不会阻塞当前线程 |
ps:挂起进程在操作系统中可以定义为暂时被淘汰出内存的进程,机器的资源是有限的,在资源不足的情况下,操作系统对在内存中的程序进行合理的安排,其中有的进程被暂时调离出内存,当条件允许的时候,会被操作系统再次调回内存,重新进入等待被执行的状态即就绪态,系统在超过一定的时间没有任何动作。 |
举例子 | |||
同步非阻塞 | 页面轮询 | 发送方每隔一定的时间向服务请求结果,这段时间发送方属于等待结果的情况,所以是同步的,每次请求都有返回一个状态(即结果还没有出来),是非阻塞的 | |
同步阻塞 | 一次普通的请求 | 发送方向服务发起请求,一直等结果,结果没有出来,线程会被挂起,直到结果出来为止 | |
异步非阻塞 | ajax异步 | 发送方向发送请求,ajax会返回状态(我在执行了),不管ajax结果,直接往下执行,结果通过回掉函数来处理。 | |
异步阻塞 | 用java实现 | 发送方向发送请求,没有结果,请求会被挂起,请求方不管结果,直接往下执行,结果通过回掉函数来处理 | |
代码补充: php 异步:ajax没有返回 url结果,当然看速度 同步:ajax必定返回url结果 |
注意 | |
1.要严格区分发送方和接收方,两边不要混肴看,不然会很懵 2.我觉得所有的概念都是相对的吧~我这边只是列出比较容易理解的个人见解,若有疑问欢迎留言 |