我读了很多有关节点js的文章,试图理解事件循环及其模式/反模式.许多作者没有提到的一件事是节点实际上处理线程.当然,应用程序程序员无法访问它们,但是很高兴知道它们的存在以及何时启动.
据我了解,当Ryan Dahl解释它时,线程将仅用于文件系统访问和联网.因此:不用于计算…而我在这里的关注是:为什么不计算?
即使我将looong for循环放在回调函数中,执行时也会阻塞整个循环.由于在http://www.slideshare.net/cacois/nodejs-patterns-for-discerning-developers上发现了该映像,所有已注册的回调将由节点的高级线程机制处理.但显然不是:(
即使使io和文件处理异步获得了很大的速度,为什么还不花大力气并使所有已注册的回调由节点的内部线程处理呢?
令我震惊的是,共享并发不适用于尝试访问全局应用程序名称空间的单独线程. (这可能是一个重要原因)
你怎么看?
解决方法:
Even if a lot of speed is gained from making io and file handling async, why not go the whole mile and make all the registered callbacks be handled by node’s internal threads?
这将破坏有关Node.js的根本“妙处”之一.如果您有这个:
if (a === 7) {
console.log(a);
}
调用console.log时,保证a为7,因为它是同步代码.同步代码的并行执行可以打破这种情况.当然,您可以随意中断回调并将其转换为线程,但这并不比其他所有线程系统都要好.
还有一个问题就是线程能够以任务队列只能非常困难地完成工作的方式耗尽系统资源.