javascript - 异步 Javascript 有什么大不了的?

标签 javascript node.js asynchronous

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

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

总而言之,异步编程就是避免在单线程中执行任何操作,您只想将实际执行传递给其他进程?

我的推理是否正确?

最佳答案

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

想法是 I/O 读取和写入可能需要很长时间,并不总是需要等待它们。您可以在等待期间继续执行代码。例如,您可以加载文件、执行查询并向其他服务发出 REST 请求。您的 Node 应用程序可以异步地同时启动所有这些,然后等待它们中的每一个完成。

例如,在 PHP 中,这很难完成,您将浪费时间等待文件加载,再浪费更多时间直到执行查询,然后再等待 REST 请求,因为您无法开始他们同时。

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

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

关于javascript - 异步 Javascript 有什么大不了的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25333050/

相关文章:

javascript - Web scraper 使用 Rx.js 遍历页面

java - 在 RxJava 流程中添加线程池

javascript - jQuery - mouseenter 上的 SlideDown > 延迟 > mouseleave 上的 SlideUp

node.js - 如何在 keystone 中提供静态站点?

javascript - EventListener 会立即触发,除非封装在匿名函数中,然后阻止 RemoveEventListener

javascript - Azure 应用服务在 URL 中添加 '/'

javascript - RailwayJS/Express on Rails : A true node. js 替代 Ruby On Rails?

java - 在 Spring Boot 中实现简单的异步方法调用时遇到问题

javascript - 剑道菜单选择问题

Javascript parseInt parseFloat 和舍入小数