天天看点

同步与异步的区别?

参考https://www.cnblogs.com/sun-web/p/10967361.html

(1)同步

同步的思想是:所有的操作都做完,才返回给用户。这样用户在线等待的时间太长,给用户一种卡死了的感觉(就是系统迁移中,点击了迁移,界面就不动了,但是程序还在执行,卡死了的感觉)。这种情况下,用户不能关闭界面,如果关闭了,即迁移程序就中断了。

(2)异步

将用户请求放入消息队列,并反馈给用户,系统迁移程序已经启动,你可以关闭浏览器了。然后程序再慢慢地去写入数据库去。这就是异步。但是用户没有卡死的感觉,会告诉你,你的请求系统已经响应了。你可以关闭界面了。

同步和异步本身是相对的。同步就相当于是 当客户端发送请求给服务端,在等待服务端响应的请求时,客户端不做其他的事情。当服务端做完了才返回到客户端。这样的话客户端需要一直等待。用户使用起来会有不友好。异步就是当客户端发送给服务端请求时,在等待服务端响应的时候,客户端可以做其他的事情,这样节约了时间,提高了效率。存在就有其道理,异步虽然好,但是有些问题是要用同步用来解决,比如有些东西我们需要的是拿到返回的数据在进行操作的。这些是异步所无法解决的。

这里主要介绍web前端中如何实现异步编程。异步编程是前端通往全栈必须理解的知识点,各种异步编程解决方案层出不穷,外面使用各种方式的实现都有,我们如果要学习别人的代码,就需要了解各种异步解决方案的原理和它们出现的原因,以及使用场景。web前端中如何实现异步编程。

同步与异步的区别?

我们常说JavaScript是单线程的,实际是指JS引擎中负责解释和执行JavaScript代码的线程只有一个,不妨叫它主线程。与之对应的其他线程还有处理ajax的线程,定时器线程,读写文件的线程(node.js)等,可以叫它们为工作线程。单线程工作是同步,跨线程工作会出现异步。异步的应用场景是需要执行比较耗时的操作,它的优点是由主线程发起后交给其他线程处理,不会阻塞主线程继续执行后面的代码,带来的问题是主线程难以感知其它线程处理的进度,其它线程处理完毕后需要通知主线程处理的结果,这个通知的方式我们之前一般采用的是回调。

同步与异步的区别?

实现异步仅仅是第一步,难点在于异步的处理结果通知,我们最终需要的是将异步代码处理得像书写同步代码一样直观和简洁,

如何实现异步编程?具体方法如下。

方法1 ,通过回调函数。优点是简单、容易理解和部署· 缺点是不利于代码的阅读和维护,各个部分之间高度相合( Coupling ),流程混乱,而且每个任务只能指定一个回调函数。

方法2 ,通过事件监听。可以绑定多个事件,每个事件可以指定多个回调函数,而且可以“去搞合”( Decoupling ),有利于实现模块化;缺点是整个程序都要变成事件驱动型,运行流程会变得很不清晰。

同步与异步的区别?

方法3 ,采用发布/订阅方式。性质与“事件监听”类似, 但是明显优于后者。

方法4 ,通过Promise 对象实现。Promise 对象是CommonJS 工作组提出的一种规范,旨在为异步编程提供统一接口。它的思想是,每一个异步任务返回一个Promise 对象,该对象有一个then 方法,九许指定回调函数。