gpt4 book ai didi

单独线程上的 Javascript 回调函数

转载 作者:数据小太阳 更新时间:2023-10-29 04:46:16 24 4
gpt4 key购买 nike

Javascript 是单线程的。那么回调函数及其包含函数是否在与主循环/事件循环相同的线程上执行?

database.query("SELECT * FROM hugetable", function(rows) {  // anonymous callback function
var result = rows;
console.log(result.length);
});
console.log("I am going without waiting...");

如果 query() 方法及其回调函数与事件循环在同一线程上执行,则会发生阻塞。如果不是,为什么 Javascript 被称为单线程?

任何人都可以帮助验证 javascript(browser/node.js) 在后台使用多线程以实现非阻塞吗?

friend 们,我看到了你的评论和答案。抱歉,我是 Javascript 的新手。我对单线程异步调用不会阻塞感到困惑。如果有 100 个用户从 hugeTable 请求数据,每个用户可能同时需要一分钟,并且事件循环将这些任务分派(dispatch)到队列中并依次执行它们,query() 方法执行如何不阻塞事件循环,因为它们都在一个线程上?

Brad 回答了这部分。

最佳答案

Node.js native 库(不是 JavaScript 部分)始终使用单独的线程,但是您代码的所有数据都会重新洗牌回单个 JavaScript 执行线程。

不可能告诉您后台是否有其他线程正在处理此查询,因为您没有指定正在使用的数据库库。然而,这并不像您想象的那么重要。

假设您要创建一个线程来处理您的数据库连接。您启动一个查询,该线程负责将查询发送到数据库服务器。然后呢?该线程一直什么都不做,直到有数据返回。你已经有效地浪费了资源来保持一个不会做很多事情的线程。 Node.js 不是这样工作的。您有一个用于执行 JavaScript 的线程。

如果您正在发送或接收数据(这主要是您的数据库连接器要做的事情),那么这将自动从后台线程池中为您处理。也有可能您使用的任何数据库连接器都有一个 native 扩展,可以用线程做任何它想做的事。

查看我的帖子以获得更完整的解释:https://stackoverflow.com/a/19324665/362536

关于单独线程上的 Javascript 回调函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20391148/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com