# 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中所用的东西都会被忽略。

陕ICP备20004732号-3