1.nodeJS是单线程,为什么每个API又可以作为一个独立线程运行?
2.最后一条具体怎么理解?
推荐我之前写的一篇文章https://segmentfault.com/a/1190000005173218
nodejs是事件驱动型的,事件驱动的观察者运行在单线程中,当调用异步函数的时候,该线程就会将这些函数任务布置下去,比如读取一个文件,监听某个端口,都会调用libuv
库开启一个新的线程。但是并不是所有异步函数都会开启一个新的线程,可能只是简单的运行在单线程中。
单线程就是在一个whilte(true)
里面检测事件队列有没有新的事件发生,比如文件读取结束了,或者是settimeout
计时结束了,都会将一个事件推入到事件队列中,观察者每隔一段时间就去看看事件队列中有没有新的事件,有的话就会去暂停while(true)
循环,然后调用回调函数执行,执行完毕后再开始while(true)
循环
单线程是说,对于你写的的 js 代码来说,代码执行的"指针"只能会位于一个地方,第一个地方的语句执行完之前不可能无缘无辜跳到另一个地方执行。
异步是说,你调用某个 API 之后,这句代码立即返回,去执行你写代码的后面一句。但是 nodejs 后台会同时去执行你发出的这条指令。
最后一句说的是 nodejs 的实现原理,这个初学可以先不用关心。
3 回答1.3k 阅读✓ 已解决
2 回答1.4k 阅读✓ 已解决
1 回答1.2k 阅读✓ 已解决
2 回答1.5k 阅读
1 回答1.2k 阅读✓ 已解决
2 回答910 阅读✓ 已解决
4 回答562 阅读✓ 已解决
http://www.infoq.com/cn/articles/nodejs-asynchronous-io