我浏览了node.js
的详细信息,了解到它支持异步编程,尽管它本质上提供了一个单线程模型.
在这种情况下,异步编程是如何处理的?它是否像运行时本身创建和管理线程,但程序员不能显式创建线程?如果有人能给我指一些资源来了解这一点,那就太好了.
我浏览了node.js
的详细信息,了解到它支持异步编程,尽管它本质上提供了一个单线程模型.
在这种情况下,异步编程是如何处理的?它是否像运行时本身创建和管理线程,但程序员不能显式创建线程?如果有人能给我指一些资源来了解这一点,那就太好了.
现在跟我说:async programming does not necessarily mean multi-threaded.
Javascript是一个单线程运行时——您无法在JS中创建新线程,因为语言/运行时不支持它.
Frank用英语说得很对(尽管有些迟钝):有一个主事件循环,可以在你的应用程序中处理事情.因此,"处理这个HTTP请求"将被添加到事件队列中,然后在适当的时候由事件循环处理.
当您调用异步操作(例如,mysql db查询)时, node .js向mysql发送"嘿,执行这个查询".由于此查询将需要一些时间(毫秒),因此需要使用 node .js使用MySQL异步库执行查询——返回事件循环并在那里执行something else次,同时等待MySQL返回给我们.比如处理HTTP请求.
Edit:相比之下, node .js could只是等待(什么也不做)mysql返回.这叫做同步呼叫.想象一下,在一家餐厅里,你的服务员向厨师提交了你的订单,然后坐下来,在厨师做饭的时候转动他/她的拇指.在餐厅,就像在一个 node .在js程序中,这样的行为是愚蠢的——你还有其他客户饿了,需要服务.因此,您希望尽可能地异步,以确保一个服务员(或node.js进程)为尽可能多的人提供服务.
Edit done
node .js使用C库与mysql通信,所以从技术上讲,这些C库可能会产生线程,但在Javascript中,你不能用线程做任何事情.