介绍
JavaScript是一种单线程语言,一次只能执行一个操作。但是,JavaScript也以其非阻滞性,异步性质而闻名,它允许其同时处理多个任务而无需阻止主线程。并发模型和事件循环使它成为可能。在本文中,我们将探讨这个概念,解释其工作原理,并提供现实生活中的示例以说明其重要性。
。了解JavaScript中的约定
**并发**指系统同时处理多个任务的能力。在JavaScript中,通过事件循环和呼叫队列。
来实现此约定。事件循环
事件循环是JavaScript并发模型的基石。它顺序检查两个结构:呼叫点并调用队列。
-
callpoint :将呼叫点视为函数调用。当调用函数时,将其推到堆栈上,并在返回值时从堆栈中弹出。 JavaScript处理一个功能一次从堆栈的顶部调用。
-
呼叫队列:诸如从服务器获取数据或阅读文件的异步操作由浏览器或node.js运行时处理。完成此过程后,将适当的回调函数放在回调队列中。
事件循环连续检查呼叫点并呼叫队列。当CallPoint空闲(即,当前没有函数执行)时,事件looper从呼叫队列中检索回调函数,然后单击呼叫点执行。
现实生活示例:从API中检索数据
让我们用一个实践示例说明并发模型和事件循环 - 从API中检索数据。
// Simulate the API request function
fetchDataFromAPI() function
setTimeout (() => {
console.log("Data received from API");
}, 2000);
}
console.log("Starting to get information");
fetchDataFromAPI();
console.log("Getting information");
在此示例中,我们有一个fetchdatafromapi函数,该函数模拟使用SettiMeout制作异步API请求。完成请求需要2秒钟。同时,我们在fetchdatafromapi呼叫之前和之后都有console.log语句。
这是发生的事情:
- 获取信息写入控制台。
- fetchdatafromapi被称为启动API请求,但是 JavaScript引擎不会等到完成。 相反,它移至下一行。
- 数据获取的结束写入控制台。
- 2秒钟后,当API请求完成后,记录了“从API接收的数据”。
这可能是由于行为现象。尽管正在进行API请求,但JavaScript引擎继续执行其他任务。 API请求完成后,将回调函数放置在呼叫队列中。事件循环接受此回调,并将其推到Callpoint以在CallPoint为空时执行。
结果
JavaScript中的并发和事件循环模型启用异步编程,允许在不阻止主线程的情况下同时执行任务。这对于构建有效的Web应用程序和有效的I/O操作非常重要。
理解这些概念对于JavaScript开发人员编写可以无缝处理多个任务的安全,非阻滞代码至关重要,这使用户更容易Web应用程序。