浏览器中Web API的任务和Node.Js中线程池的任务一样吗?

问题描述 投票:0回答:2

对于浏览器中的Javascript和node.js,我试图理解线程池和Web API之间的区别。 线程池和 Web API 都使 Javascript 能够处理异步行为,那么它们有何不同呢? 任务完成后,Web API 将任务发送到队列,从队列将任务发送回调用堆栈。线程池和 NodeJS 如何模仿异步行为?

javascript node.js browser threadpool event-loop
2个回答
1
投票

它们完全无关。


主事件循环是您编写的大多数 JavaScript 代码运行的地方。

昂贵的操作(例如文件访问或在工作线程中显式运行的代码)通常在主事件循环之外完成。这可以释放主事件循环来执行其他工作

当某些事情在主事件循环之外执行时,我们说它是异步的,因为它没有与主事件循环正在执行的其余工作按顺序完成。

线程池正是 Node.js 的特定实现管理这些异步任务的方式。


Web API 是为在浏览器中运行的 JavaScript 程序提供的一组类/函数等,这些程序具有嵌入网页中的 JS 程序通常需要的功能,但不属于 JavaScript 语言。

例如对象构造函数是JavaScript的核心部分,而HTML DOM API是Web API。

其中一些功能(例如 XMLHttpRequest)确实在主事件循环之外工作,但这不是 Web API 的固有功能(例如 DOM API 则不然)。

Node.js 将 ECMAScript 规范未定义的 API 放入内置模块(例如

fs
模块)中。


0
投票

您可能对libuv感兴趣。虽然浏览器提供 Web API 来处理异步代码(例如

setTimeout
),但 Node.js 使用此库来处理异步 I/O。

© www.soinside.com 2019 - 2024. All rights reserved.