Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/475.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果JavaScript一次只能完成一个操作,并且同步意味着事情同时发生,那么它是如何同步的_Javascript - Fatal编程技术网

如果JavaScript一次只能完成一个操作,并且同步意味着事情同时发生,那么它是如何同步的

如果JavaScript一次只能完成一个操作,并且同步意味着事情同时发生,那么它是如何同步的,javascript,Javascript,我对同步JavaScript和异步JavaScript感到困惑。如果默认情况下JavaScript是单线程的,一次只能一行一行地完成一个操作,那么这不是“异步”的吗,即事情不会同时发生?它是如何同步的 它也是一段异步代码,就像promise一样,promise允许代码的其余部分在等待解析时运行。这难道不是同步的,即让多个操作同时发生吗 我很困惑,因为在我看来这是一种错误的方式。有些东西可以是单线程的,也可以是异步的 首先,让我们讨论线程和进程之间的区别 基本的定义是,不同的进程有不同的内存空间—

我对同步JavaScript和异步JavaScript感到困惑。如果默认情况下JavaScript是单线程的,一次只能一行一行地完成一个操作,那么这不是“异步”的吗,即事情不会同时发生?它是如何同步的

它也是一段异步代码,就像promise一样,promise允许代码的其余部分在等待解析时运行。这难道不是同步的,即让多个操作同时发生吗


我很困惑,因为在我看来这是一种错误的方式。

有些东西可以是单线程的,也可以是异步的

首先,让我们讨论线程和进程之间的区别

基本的定义是,不同的进程有不同的内存空间——它们不能访问彼此的内存

而单独的线程共享相同的内存空间

如果我们将一个线程视为一个指令队列,那么多线程应用程序可以有两个指令队列同时运行,但每个指令队列访问相同的内存(并且可能会破坏另一个线程的内存状态)

JavaScript是单线程的

所有这一切意味着有一个指令队列

现在,这意味着JavaScript可能不适合使用快速排序算法对一万亿个数字进行排序,因为您无法使用计算机的多个处理器

那么异步是如何工作的呢

归根结底,这要归功于JavaScript本身

举个例子,如果我写了一些代码,如下所示:

const response = await fetch("/api/someData"); 
或不使用异步/等待:

    fetch("/api/someData").then(response => {
        //Use the response here. 
    }); 
假设这个响应需要一秒钟的时间才能返回,JavaScript引擎不会坐在那里无所事事,直到响应返回

相反,事件循环将继续,并继续处理它可以处理的所有其他内容,直到承诺得到解决并且代码可以继续


如果您想了解事件循环的具体工作方式,我建议您阅读Mozilla文档,或者

同步和异步是反向的。从计算机科学和工程的角度来看,同步有时更容易被描述为顺序的——即,一个操作等待前一个操作完成。而asynchronous指的是两个并行运行的操作——也就是说,任务可以在不等待前一个任务完成的情况下执行。您的问题可能已经得到了回答:@otwebdev Tom Padilla在上面提供的链接中对此有一个评论:“奇怪的是”Synchronously“意味着”使用相同的时钟因此,当两条指令同步时,它们使用相同的时钟,并且必须一个接一个地发生。“异步”意味着“不使用相同的时钟”,因此指令之间并不同步。这就是为什么它向后看,这个术语不是指指令之间的关系。它指的是每个指令与时钟的关系。希望有帮助。“@TylerRoper-在计算机中,一些词典实际上指出,异步意味着每个操作只有在前一个操作完成后才开始-因此这种混淆是完全合理的!!wikipedia在计算机编程中的异步是指独立于主程序流的事件的发生以及处理此类事件的方法@TylerRoper-并不是说你错了-只是指出字典中的不一致性(谁应该远离计算术语:p)