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()方法执行如何不阻止事件循环,因为它们全部打开一个单线程?
布拉德回答了这一部分
Node.js 本机库(不是 JavaScript 部分)始终使用单独的线程,但代码的所有数据都会被重新整理回单个 JavaScript 执行线程。
由于您没有指定正在使用的数据库库,因此无法告诉您后台的其他线程是否正在处理此查询。然而,这并不像你想象的那么重要。
假设您要创建一个线程来处理数据库连接。您触发一个查询,该线程负责将查询发送到数据库服务器。然后呢?在有数据返回之前,该线程什么都不做。你实际上浪费了资源,保留一条没有多大作用的线程。Node.js 不是这样工作的。您有一个用于执行 JavaScript 的线程。
如果您正在发送或接收数据(这主要是您的数据库连接器要做的事情),那么这将在后台线程池中自动为您处理。您使用的任何数据库连接器也可能具有本机扩展,可以对线程执行任何操作。
请参阅我的帖子以获取更完整的解释: https: //stackoverflow.com/a/19324665/362536
归档时间: |
|
查看次数: |
3034 次 |
最近记录: |