# Node.js FAQ
# 介绍 Node.js
Node.js 是 Javascript 在服务端的运行环境,构建在 chrome 的 V8 引擎之上,基于事件驱动、非阻塞 I/O 模型,充分利用操作系统提供的异步 I/O 进行多任务的执行,适合于 I/O 密集型的应用场景,因为异步,程序无需阻塞等待结果返回,而是基于回调通知的机制,原本同步模式等待的时间,则可以用来处理其它任务。
# Node.js 是单线程吗?
Node 是单线程的指的是JavaScript的执行是单线程的
(开发者编写的代码运行在单线程环境中),但 Javascript 的宿主环境,无论是 Node 还是浏览器都是多线程的。因为 libuv
中有线程池的概念存在的,libuv
会通过类似线程池的实现来模拟不同操作系统的异步调用,这对开发者来说是不可见的。
# Node.js 如何创建进程
四种方法 spawn
exec
execFile
fork
- fork, exec, execFile 都是通过 spawn 来实现的。
- exec 默认会创建 shell。execFile 默认不会创建 shell,意味着不能使用 I/O 重定向、file glob,但效率更高。
- spawn、exec、execFile 都有同步版本,可能会造成进程阻塞
# Node.js 如何开启多进程
# Node.js中exports与module.exports的区别
- exports
- module.exports
以下三点为他们的区别:
- module.exports 初始值为一个空对象 {}
- exports 是指向的 module.exports 的引用
- require() 返回的是 module.exports 而不是 exports
exports只是module.exports的辅助方法。 你的模块最终返回module.exports给调用者,而不是exports, exports所做的事情是收集属性, 如果module.exports当前没有任何属性的话,exports会把这些属性赋予module.exports。 如果module.exports已经存在一些属性的话,那么exports中所用的东西都会被忽略。
← Node.js 安装 MongoDB 基础 →