同步和异步的理解

js单线程。

因为js里面有dom操作就决定它只能是单线程的,否则会引起冲突,比如删除节点和添加节点,这都是非常常见的操作,但是如果js底层是多线程的,这两个操作放到一起,该执行那一个操作呢这就决定了它只能是单线程
那么如果是一个单线程的操作,CPU的还有大量的空余浪费,就不能得以很好的利用,所以就有了同步和异步的操作

什么是同步和异步

其实浏览器底层在执行js代码的时候,先将同步的代码放到一个执行栈当中,如果遇到异步代码,(怎么判断它是异步代码?只要有回调函数的都是异步代码)就将异步代码放到任务队列中,这样就形成了异步操作,执行栈当中的代码一直运行,任务队列中的代码也在执行,当执行栈清空的时候,它就会去调用任务队列当中的代码,继续执行,任务队列中遵循的是先入先出都原则,但是如果有定时器这样的异步代码可能需要一定的时间后再执行,那就会跳过它,继续调用下面的异步代码,一个异步函数里面有回调函数,当异步函数执行完操作时就会通过回调函数告诉CPU,我已经执行完了,可以来调用我了,但是这里会出现一个问题,就是不知道执行栈中的代码和异步函数哪一个先完成,无论怎么样,只要执行栈清空了它就会立马执行任务队列当中的函数,但是如果早了,回调函数就没有内容,如果晚了也不太好,所以我们把异步操作交给我们的第三方promise

什么是promise

promise其实是一个容器,它解决了异步编程的一些问题,比如回调地狱,它的实例对象有两个参数,一个是resolved函数,一个是reject函数,当回调成功则会调用resolved函数,失败会调用reject函数,
promise有三个状态,pending(进行中),fulfiling(成功),rejected(失败)。当从pending到fulfiling时或者pending到rejected时称为resolved(定型),如果已经定型了,无论什么时候去调用promise的回调函数都可以得到这个结果,不像普通的事件监听,你错过了它就不能得到结果了

promise的用法

. then的方法调用promise的回调函数,当promise执行完成以后才会调用它,它当返回值其实也是promise,还可以再次进行. then等等
但是这样编写代码的可读性比较差我们又有了另外一种写法,就是async和await。它其实是promise加上Generator的一个语法糖,首先这个函数必须是异步的,用async进行标注,然后await只能使用在async范围内,这样我们就可以实现用同步的方法去编写异步代码了去。
对于这里我的理解是这样的,这是一个异步函数,首先还是会放到任务队列当中,在这个异步函数中执行顺序和同步的差不多,只有等到await函数执行完成之后,才会继续往下执行,也就是说await后面的代码必须要等着,直到await执行完成,其实一般情况下,也许一个异步函数里面有很多个await,await的作用就是帮我们拿到上一次的执行结果,然后返回一个promise,在特定的时间去触发它,继续下一个await,Generator里面有一个iterdtor. next()方法,执行到最后一个await的时候会返回一个TRUE,这个时候就会把异步函数执行的结果return出去。这样就避免了一直. then,增强了代码的可读性

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
接口同步异步在编程中有着不同的执行方式和效果。在同步方式下,调用接口的线程会被阻塞,直到接口的操作完成并返回结果。这意味着线程会一直等待,直到接口的操作完成后才能继续执行后续的代码。 相比之下,在异步方式下,调用接口的线程不会被阻塞,而是可以继续执行后续的代码,而不需要等待接口操作的结果返回。在异步方式中,通常会使用回调函数或者事件来处理接口操作的结果。这样可以提高程序的响应性和并发性,因为线程可以同时执行其他任务而不必等待接口操作完成。 在具体实现中,同步调用通常会使用“wait”来等待接口操作完成,而异步调用则会使用类似“WaitForSingleObject”的函数来等待接口操作的完成。尽管两种方式都会等待,但是在同一线程中,异步方式更加灵活,因为它不会阻塞调用线程,可以让线程同时执行其他任务或处理其他事件。 总之,接口同步异步的区别在于调用方是否需要等待接口操作的结果,并且在同步方式下线程会被阻塞,而在异步方式下线程可以继续执行其他任务。这使得异步方式可以提高程序的并发性和响应性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [串口 同步异步 理解](https://blog.csdn.net/cs74184235/article/details/48438727)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值