We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Learn more about funding links in repositories.
Report abuse
There was an error while loading. Please reload this page.
第98天 说说你理解的同步和异步的区别是什么?
同步 ,,只能单步执行 异步。。 能一起执行
同步和异步是用于描述一个操作的阻塞性的形容词。 这句话可能有表述错误。
在现实世界中。
同步就是一气呵成,做事情,这件事情就要一条龙做到底,异步就是我做了一半,然后去做另外的事情,然后还要时不时回来盯着这件事到底做好了没有。
在程序世界,
HTTP请求或者其他程序方法调用,请求一次,整件事情就做完了,叫同步,如果处理时间很长,就卡住,直到处理完返回,造成的后果是,如果请求不是双工的,会有请求超时问题。
异步,就是HTTP请求后直接返回,不知道请求结果,另起一个HTTP请求定时去获取结果。
Nodejs的核心就是回调,默认全是异步,当然你可以强制同步堵塞住。
同步就是上一个任务结束下一个任务再开始,比如alert弹窗,你不点击确定他就会阻塞后边代码的执行; 异步就是按顺序开始(不可能同时开始)但是不一定按顺序结束,比如图片的加载就是走的异步。
同步:指的是同一时间只会执行一个任务,只有当前任务执行结束才会继续执行下一个任务。 异步:指的是人主观上同一时间程序同时进行多个任务,实际上是已极小的时间间隔在不同任务间进行切换来实现的。 JS中指的就是多个任务按照你编码的顺序开始任务,但是任务的完成顺序并不一定和开始的顺序相同。 常用的异步实现方法有回调、Promise
同步和异步就像物理里面的串联和并联一样 同步是执行某一任务成功与否影响下一步任务的执行 异步是每个任务之间互相不影响
由于JS是单线程的,所以同步的意思是等待当前任务完成,然后再执行下面的代码。异步解决了阻塞问题。
@t532
同步和异步是用于描述一个操作的阻塞性的形容词。 _同步_意味着在等待某个操作执行完毕时,不能进行其他操作; _异步_则意味着在此期间可以进行其他操作。 异步的实现方法有 Callback、Promise 等。
同步和异步是用于描述一个操作的阻塞性的形容词。
_同步_意味着在等待某个操作执行完毕时,不能进行其他操作;
_异步_则意味着在此期间可以进行其他操作。
谈下我的看法,不正之处还请指出。
同步与异步,阻塞与非阻塞应该是两对概念。 同步与异步的区别在于程序是否需要等待调用结果出来才能继续执行。 阻塞与非阻塞的区别在于程序调用线程是否会挂起等待调用结果。
由于JavaScript是单线程语言,所以只存在同步阻塞与异步非阻塞。
@EmiyaYang
谈下我的看法,不正之处还请指出。 同步与异步,阻塞与非阻塞应该是两对概念。 同步与异步的区别在于程序是否需要等待调用结果出来才能继续执行。 阻塞与非阻塞的区别在于程序调用线程是否会挂起等待调用结果。 由于JavaScript是单线程语言,所以只存在同步阻塞与异步非阻塞。
是否可以理解为,同步与异步更加偏向表述程序执行逻辑的不同,而阻塞和非阻塞是底层的线程限制?
如果这样,async function 内的 await ... 能否视为局部的“同步非阻塞”操作?而“同步非阻塞”、“异步阻塞”又是否在其他语言中存在呢?
async function
await ...
是否可以理解为,同步与异步更加偏向表述程序执行逻辑的不同,而阻塞和非阻塞是底层的线程限制? 如果这样,async function 内的 await ... 能否视为局部的“同步非阻塞”操作?而“同步非阻塞”、“异步阻塞”又是否在其他语言中存在呢?
首先,我认为你的理解是正确的。 其次,现阶段async/await还只是语法糖吧,本质还是promise,所以还是属于异步非阻塞。关于“同步非阻塞”、“异步阻塞”的在其他语言的具体应用场景,我回答不了。
谢谢你的解答,
其次,我仍然认为,虽然在全局上,一个 async function 的执行是异步非阻塞的(在支持 Top-level await 后,这个说法可能也不准确了),但是在它内部的上下文中, await ... 仍然是同步非阻塞的,因为它表述了当前上下文的等待操作。
await
我会这么想的原因主要是,我认为同步与异步是一个抽象的表述程序执行逻辑的术语,而不必牵扯到具体的技术实现,也因此可以细分成多个不同的层次来讨论(一组程序、一个程序、一个函数、一个内置运算符、...);相反的,阻塞和非阻塞牵涉到底层的线程管理,因此我们只能按线程来讨论。不知这个观点是否正确,如有错误请您指正。
另外,async/await 并非只有现阶段是语法糖,它就是语法糖。
同步代码执行在js主线程中,异步保存在异步队列中,具体实现是js宿主去执行,js只负责监听回调,所以异步能实现非阻塞,本质是借助了js宿主(浏览器或者node)去执行的。具体之前有个issue描述过: javascript是单线程语言,那他的异步机制是怎么实现的
同步会阻塞,会等待,相当于单线程执行任务,任务执行顺序一个一个执行,当前任务不执行完不会执行下个任务。
异步不会阻塞,一起执行,互不影响,并且会监测点哪个任务执行完了,看是否继续进行新的任务。
由于Js是单线程,同步可以理解为当前任务没执行完就会一直阻塞后续任务的执行,只有等当前任务执行完才可以执行后续任务;异步则不会阻塞后续任务的执行,会一并按顺序执行,互不干扰,如有回调函数执行完后会触发对应的回调函数。
Activity
dondonZh commentedon Jul 23, 2019
同步 ,,只能单步执行
异步。。 能一起执行
ghost commentedon Jul 23, 2019
同步和异步是用于描述一个操作的阻塞性的形容词。这句话可能有表述错误。hunterhug commentedon Jul 23, 2019
在现实世界中。
同步就是一气呵成,做事情,这件事情就要一条龙做到底,异步就是我做了一半,然后去做另外的事情,然后还要时不时回来盯着这件事到底做好了没有。
在程序世界,
HTTP请求或者其他程序方法调用,请求一次,整件事情就做完了,叫同步,如果处理时间很长,就卡住,直到处理完返回,造成的后果是,如果请求不是双工的,会有请求超时问题。
异步,就是HTTP请求后直接返回,不知道请求结果,另起一个HTTP请求定时去获取结果。
Nodejs的核心就是回调,默认全是异步,当然你可以强制同步堵塞住。
nulidangxueba commentedon Jul 23, 2019
同步就是上一个任务结束下一个任务再开始,比如alert弹窗,你不点击确定他就会阻塞后边代码的执行;
异步就是按顺序开始(不可能同时开始)但是不一定按顺序结束,比如图片的加载就是走的异步。
nowherebutup commentedon Jul 23, 2019
LinStan commentedon Jul 23, 2019
同步:指的是同一时间只会执行一个任务,只有当前任务执行结束才会继续执行下一个任务。
异步:指的是人主观上同一时间程序同时进行多个任务,实际上是已极小的时间间隔在不同任务间进行切换来实现的。
JS中指的就是多个任务按照你编码的顺序开始任务,但是任务的完成顺序并不一定和开始的顺序相同。
常用的异步实现方法有回调、Promise
joyeeLee commentedon Jul 23, 2019
同步和异步就像物理里面的串联和并联一样
同步是执行某一任务成功与否影响下一步任务的执行
异步是每个任务之间互相不影响
Drowned-fish commentedon Jul 24, 2019
由于JS是单线程的,所以同步的意思是等待当前任务完成,然后再执行下面的代码。异步解决了阻塞问题。
EmiyaYang commentedon Jul 24, 2019
@t532
谈下我的看法,不正之处还请指出。
同步与异步,阻塞与非阻塞应该是两对概念。
同步与异步的区别在于程序是否需要等待调用结果出来才能继续执行。
阻塞与非阻塞的区别在于程序调用线程是否会挂起等待调用结果。
由于JavaScript是单线程语言,所以只存在同步阻塞与异步非阻塞。
ghost commentedon Jul 24, 2019
@EmiyaYang
是否可以理解为,同步与异步更加偏向表述程序执行逻辑的不同,而阻塞和非阻塞是底层的线程限制?
如果这样,
async function
内的await ...
能否视为局部的“同步非阻塞”操作?而“同步非阻塞”、“异步阻塞”又是否在其他语言中存在呢?EmiyaYang commentedon Jul 24, 2019
首先,我认为你的理解是正确的。
其次,现阶段async/await还只是语法糖吧,本质还是promise,所以还是属于异步非阻塞。关于“同步非阻塞”、“异步阻塞”的在其他语言的具体应用场景,我回答不了。
ghost commentedon Jul 24, 2019
@EmiyaYang
谢谢你的解答,
其次,我仍然认为,虽然在全局上,一个
async function
的执行是异步非阻塞的(在支持 Top-levelawait
后,这个说法可能也不准确了),但是在它内部的上下文中,await ...
仍然是同步非阻塞的,因为它表述了当前上下文的等待操作。我会这么想的原因主要是,我认为同步与异步是一个抽象的表述程序执行逻辑的术语,而不必牵扯到具体的技术实现,也因此可以细分成多个不同的层次来讨论(一组程序、一个程序、一个函数、一个内置运算符、...);相反的,阻塞和非阻塞牵涉到底层的线程管理,因此我们只能按线程来讨论。不知这个观点是否正确,如有错误请您指正。
另外,async/await 并非只有现阶段是语法糖,它就是语法糖。
zlx362211854 commentedon Jul 31, 2019
同步代码执行在js主线程中,异步保存在异步队列中,具体实现是js宿主去执行,js只负责监听回调,所以异步能实现非阻塞,本质是借助了js宿主(浏览器或者node)去执行的。具体之前有个issue描述过:
javascript是单线程语言,那他的异步机制是怎么实现的
lizhesystem commentedon Jul 15, 2020
同步会阻塞,会等待,相当于单线程执行任务,任务执行顺序一个一个执行,当前任务不执行完不会执行下个任务。
异步不会阻塞,一起执行,互不影响,并且会监测点哪个任务执行完了,看是否继续进行新的任务。
xiaoqiangz commentedon Jun 24, 2022
由于Js是单线程,同步可以理解为当前任务没执行完就会一直阻塞后续任务的执行,只有等当前任务执行完才可以执行后续任务;异步则不会阻塞后续任务的执行,会一并按顺序执行,互不干扰,如有回调函数执行完后会触发对应的回调函数。