Gus*_*oft 2 javascript synchronization asynchronous node.js
根据我的理解,javascript 要么在浏览器中运行,要么在 Node.js 中作为后端运行。
浏览器或 Node.js,取决于您运行 javascript 的位置,将通过 Web API 或 C++ API 的处理函数阻止运行时(即网络调用、图像渲染等),然后将它们发送到事件循环并最终合并它们进入运行 javascript 的单线程。
我不明白的是,当我谷歌“是 javascript 同步还是异步”时,答案是 javascript 是异步的。
但这是真的吗?Javascript 是异步的,因为浏览器或 Node.js 后端中的 web API 或 c++ API,这使得线程在幕后,但 javascript 本身不是异步的?
如果javascript只有一个线程,它必须是一种同步语言吗?
Javascript(在浏览器和 node.js 中实现)是一个事件驱动系统。
这意味着它在与非阻塞、异步 I/O 一起使用时效果最佳,为您提供与事件驱动系统协调的最佳体验和功能。这不一定是 Javascript 语言本身固有的(你可以制作一个除了阻塞 I/O 什么都没有的 Javascript 版本),但是所有流行的 Javascript 实现都依赖于一个事件队列,并依赖于异步 I/O 工作与事件队列协调以提供有用的编程环境。
直到最近,Javascript 还没有有用的线程和有用的线程同步工具来使具有阻塞 I/O 的多线程系统实用或有用。现在浏览器和 node.js 中都有线程,尽管 node.js 中的线程非常繁重(V8 解释器的全新实例、单独的堆等......)所以它们不一定是性能与将线程作为更多固有特性的系统竞争。此外,Javascript 中的线程同步工具还处于开发初期。
我不明白的是,当我谷歌“是 javascript 同步还是异步”时,答案是 javascript 是异步的。
当前流行的 Javascript 实现是在需要异步 I/O 以提高生产力的环境中。在纯语言中不一定需要它本身,尽管我不知道任何假设线程和阻塞 I/O 的实现。
Javascript 是异步的,因为浏览器中的 Web API 或 C++ API 是 Node.js 后端,可以在后台创建线程,但是 javascript 本身不是异步的?
Javascript 环境具有异步功能,因为 Javascript 与事件驱动环境配对,并与诸如计时器和 I/O 之类的异步操作配对。因此,Javascript 实现与环境添加的其他内容的组合使环境能够编写可以使用异步功能的代码。请不要太纠结于关于 Javascript 本身是否异步的语义争论。据我所知,指定 Javascript 语言的 ECMAScript 规范不一定要求这样做。我认为可能存在没有异步功能的纯 Javascript 语言的实现。但是,您在网络或书籍上阅读的大部分内容都将引用“Javascript” 当它们的真正含义是 Javascript 的流行实现时,例如在 Web 浏览器或 node.js 中。而且,坦率地说,这主要是相关的,因为这是您可以实际使用 Javascript 的地方,除非您要构建自己的自定义环境。
如果javascript只有一个线程,它必须是一种同步语言吗?
你这个问题的意思并不完全清楚。默认情况下(不调用 webWorkers 或 Worker Threads)Javascript 在一个线程中运行您的 Javascript 代码,但它可以访问非阻塞 I/O 函数,允许操作与您的 Javascript 并行运行。在浏览器中,您可以对服务器进行 Ajax 调用,然后在该 Ajax 调用完成时执行其他操作(进行一些计算、更新屏幕、更新屏幕上的时钟等),然后在完成时执行通知从 Ajax 调用到达,您可以处理结果。虽然您的实际 Javascript 行是同步运行的,但您可以启动异步操作,从而与您的 Javascript 执行并行运行一些事情。我将避免争论是否有人想称它为“
| 归档时间: |
|
| 查看次数: |
206 次 |
| 最近记录: |