因此,我对Node.js的工作原理有了一个理解:它只有一个侦听器线程,该线程接收一个事件,然后将其委托给一个工作池。工作线程在完成工作后通知侦听器,然后侦听器将响应返回给调用者。
我的问题是:如果我在Node.js中建立一个HTTP服务器,并在我的某个路由路径事件上调用睡眠(例如"/test/ sleep "),整个系统就会停止。甚至是单个监听器线程。但我的理解是,这段代码发生在worker池中。
现在,相比之下,当我使用Mongoose与MongoDB对话时,数据库读取是一项开销很大的I/O操作。Node似乎能够将工作委托给线程,并在完成时接收回调;从DB加载所用的时间似乎不会阻塞系统。
Node.js如何决定使用线程池线程而不是侦听器线程?为什么我不能编写休眠并且只阻塞线程池线程的事件代码?
发布于 2017-04-03 06:56:16
这种误解仅仅是抢占式多任务和协作式多任务之间的区别。
睡眠关闭了整个狂欢节,因为实际上所有的游乐设施都只有一条线,而你关闭了大门。把它想象成“JS解释器和其他一些东西”,忽略threads...for你,只有一个线程,...
...so不会阻止它。
https://stackoverflow.com/questions/22644328
复制相似问题