单独一个线程上的javascript回调函数

Sha*_*awn 7 javascript jquery multithreading javascript-events

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...");
Run Code Online (Sandbox Code Playgroud)

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

任何人都可以帮助验证javascript(browser/node.js)是否在场景后面使用多个线程以实现非阻塞?

谢谢,

朋友们,我看到了你的意见和答案.对不起,我对javascript很新.我很困惑,单线程asyn调用不会阻塞.如果有100个用户从hugeTable请求数据,这可能每个并发一分钟,并且事件循环将这些任务分配到一个队列并依次执行它们,query()方法执行如何不阻止事件循环,因为它们全部打开一个单线程?

布拉德回答了这一部分

Bra*_*rad 3

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

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

假设您要创建一个线程来处理数据库连接。您触发一个查询,该线程负责将查询发送到数据库服务器。然后呢?在有数据返回之前,该线程什么都不做。你实际上浪费了资源,保留一条没有多大作用的线程。Node.js 不是这样工作的。您有一个用于执行 JavaScript 的线程。

如果您正在发送或接收数据(这主要是您的数据库连接器要做的事情),那么这将在后台线程池中自动为您处理。您使用的任何数据库连接器也可能具有本机扩展,可以对线程执行任何操作。

请参阅我的帖子以获取更完整的解释: https: //stackoverflow.com/a/19324665/362536