Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.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_Node.js_Asynchronous - Fatal编程技术网

异步Javascript有什么大不了的?

异步Javascript有什么大不了的?,javascript,node.js,asynchronous,Javascript,Node.js,Asynchronous,我刚刚开始阅读更多关于异步编程的内容,我会问我下面的推理是否正确,如果不是,我误解了什么 我的理解是,异步编程在谈论I/O时最为相关,这是因为I/O事件的执行由其他执行环境处理,例如操作系统或数据库。 但是,我也可以运行Node.js的两个实例,例如一个需要高度响应的实例,我立即将长时间运行的Javascript进程的执行传递给另一个Node.js实例,在这个实例上,长时间运行的进程可以锁定单个线程,并且只发送回呼,告诉响应服务器执行还可以吗?创建运行异步javascript的外部执行环境的最常

我刚刚开始阅读更多关于异步编程的内容,我会问我下面的推理是否正确,如果不是,我误解了什么

我的理解是,异步编程在谈论I/O时最为相关,这是因为I/O事件的执行由其他执行环境处理,例如操作系统或数据库。 但是,我也可以运行Node.js的两个实例,例如一个需要高度响应的实例,我立即将长时间运行的Javascript进程的执行传递给另一个Node.js实例,在这个实例上,长时间运行的进程可以锁定单个线程,并且只发送回呼,告诉响应服务器执行还可以吗?创建运行异步javascript的外部执行环境的最常见方法是启动WebWorkers,以避免阻塞单个三个? 也可以编写没有任何积极影响的异步代码,例如,如果我所有的异步代码都在single Node.js实例上执行,而没有传递到其他执行环境。这不会给我带来积极的影响,只会导致更复杂的程序逻辑,我所有的代码仍然需要在相同的环境中执行

总之,异步编程就是要避免在单个线程中执行任何东西,您只想将实际执行传递给其他进程


我的推理正确吗?

异步编程特别有用,但不仅对I/O有用

其思想是I/O读写可能需要很长时间,而且并不总是需要等待它们。您可以在等待时继续执行代码。例如,您可以加载一个文件,执行一个查询,并对另一个服务执行REST请求。您的节点应用程序可以同时异步启动所有这些,然后等待它们中的每一个完成

例如,在PHP中,这是很难实现的,您将浪费时间等待文件加载,在执行查询之前浪费更多时间,然后再等待REST请求,因为您无法同时启动它们

所以这是一个很大的优势,虽然它也有点理论性。在实践中,您会发现经常需要一个请求/查询/文件的输出作为下一个请求/查询/文件的输入


节点本身不是单线程的(实际上,我希望不是)。但您不必自己实现多线程。此外,它可以是多线程的,尽管它不必是多线程的。即使在单线程和/或单核心环境中,它也可以更快,因为实际上可以暂停执行一个任务,直到完成作为其一部分的I/O。正如我所说,在PHP中,脚本在等待数据库响应时不能做任何其他事情,而在Node中则可以。

异步Javascript的重要意义在于,您可以编写异步程序,而无需考虑线程等低级构造。在Javascript中,您可以通过使用回调和事件等机制将程序的执行链接在一起,从而处理复杂的并发逻辑


一般来说,异步编程的重要意义在于,您可以处理可能需要大量时间才能执行的事情,例如打开文件、下载图像或计算Pi,而不会阻止其他进程执行它们的工作


Javascript中并发的秘密在于允许单线程环境中的异步行为。

Javascript不能处理多线程,所以我对你在这里提出的问题感到困惑异步编程不仅仅与I/O有关。它在其他地方也很常见。我认为OP把异步线程与callbacks@IngoBürk我发现异步编程都是关于I/O的,但在更一般的意义上——一些输入事件/信号,包括计时器过期,触发执行的继续。我想我不明白的核心是当人们说“例如,你可以加载一个文件,执行一个查询,对另一个服务执行REST请求。”我当然可以,但所有这些操作实际上都必须在某个地方执行,即使是I/O,它也会使用CPU,是node产生了一些轻量级线程来处理执行,还是它只是调用了一些OS pacific代码来处理实际执行?我不完全了解node的所有实现细节,但它会在必要时使用线程。但如果可能,它也可以处理消息。当某个事件发生时,例如计时器关闭时,它可以从操作系统接收消息。某些操作(如文件I/O)无法执行此操作,必须在线程中进行包装。I/O操作本身不需要花费很多CPU。如果您等待REST服务,那么这就是您的CPU所做的一切:等待。当它等待时,它可以做其他事情。线程之间的切换很快,CPU甚至可以在等待硬盘时执行代码。