Fork me on GitHub

同步与异步

1、同步交互:发送一个请求,需要等待返回,然后才能够发送下一个请求,有个等待过程

2、异步交互:发送一个请求,不需要等待返回,随时可以再发送下一个请求,也就是不需要等待

  • 区别:一个需要等待,一个不需要等待,再部分情况下,我们的项目开发中都会优先选择不需要等待的异步交互方式。
  • 同步:用来确保资源一次只能被一个县城使用的过程。同步对于单线程程序没有任何好处。

使用同步比非同步的性能差三到四倍

线程都是独立的,而且异步执行,也就是说每个线程都包含了运行时所需要的数据或者方法

而不需要外部的资源或者方法,也不必关心其他线程的状态或者行为。

但是经常有些同时运行的线程需要共享数据,此时就需要考虑其他线程的状态和行为。

否则就不能保证程序的运行结果的正确性

需要做的是允许一个线程彻底完成他的任务后,在允许执行下一个线程执行。必须保证一个共享的

资源一次只能被一个线程使用,实现的目的过程叫做同步。

  • 比如广播就是一个异步的例子。发起者不关心接受者的状态,不需要等待接受者的返回信息
  • 比如电话就是一个同步的例子,发起者需要等待接收者,接通电话后,通信才能开始,需要等待接收者的返回信息。

同步和异步的区别:

在进行网络编程的时候,我们会看到同步,异步,阻塞,非阻塞4种调用方式以及他们的组合

其中同步方式,异步方式主要是由客户端client控制的

同步sync:

就是发起一个功能调用的时候,在没有得到结果之前,该调用就不返回或者继续执行后续操作

Java中所有方法都是同步调用,因为必须要等待结果后才能继续执行

我们说的同步,异步的时候,一般而言是指那些需要其他端写作或者需要一定时间完成的任务

简单而言:同步就是必须一件一件事做,等前一件做完了后才能做下一件事

B/S模式的表单提交:客户端提交请求–》等待服务器处理–》处理完毕返回

在这个过程中客户端(浏览器)不能做其他事情

异步(Async)

异步与同步相反,当一个异步过程调用发出后,调用者在没有得到结果之前,就可以继续执行后续操作

当这个调用完成后,一般通过状态,通知和回调来通知调用者。

对于异步调用,调用的返回并不受调用者控制

对于通知调用者的三种方式:

  • 状态:监听被调用者的状态(轮询),调用者需要每隔一定时间检查一次,效率会很低
  • 通知:当被调用者执行完成后,发出通知告知调用者,不需要消耗太多性能
  • 回调:与通知类似,当被调用者执行完成后,会调用调用者提供的回调函数

B/S模式的ajax的请求,具体过程:客户端发出ajax请求–》服务端处理–》处理完毕执行客户端回调

在客户端(浏览器)发出请求后,仍然可以做其他的事情

同步与异步的区别:请求发出后,是否需要等待结果,才能继续执行其他操作。