nodejs start1

141 阅读1分钟

node是一个runtime,可以让js代码跑在服务器上

js包含了三个部分DOM ,BOM和ecmascript

nodejs 基本包含了ecma,同时底层上扩展了一些功能 如libuv 提供了fs、http

应用场景:

中间层 前后端分离
服务端渲染
常见的工具库 工具类 webpack
处理高并发


多线程适合cpu密集型
node适合I/O密集型(文件读写) web的应用场景 借助了异步的特性 基于事件


异步非阻塞 同步阻塞

男生给女生告白打电话的例子!!!

阻塞非阻塞是程序在等待调用结果时的状态,取决于调用者

异步同步则是取决于被调用者的状态

阻塞调用就是调用结果返回之前,当前线程会被挂起,调用线程只有在得到结果之后才会返回

全局对象

Buffer、process
timers(setTimeout、setInterval、clearTimeout、clearInterval、setImmediate、clearImmediate)等

process

process.argv 用户自定义的参数
process.cwd //当前文件在哪里执行的,这个是绝对路径,这个变量不是固定的可以更改的
process.kill(pid) 杀死pid结束进程
process.nextTick node事件环中的一个微任务 比promise要快
process.env 可通过自定义配置进程环境参数 比如 process.env.NODE_ENV

setImmediate作为nodejs的一个宏任务 和setTimeout 随机存在先后(why?)

node事件环

node中有很多队列

setImmediate vs setTimeout 谁先执行??
一道面试题:

  let fs = require('fs')
  fs.readFile('./template.html', () => {
	setTimeout(() => {
    console.log('setTimeout')
    })  
    setImmediate(() => {
    console.log('setImmediate')
    })
})

谁先执行??
很显然 readFile为poll(轮询阶段),按照上述node事件环执行图,紧接着应该执行check阶段,恰好setImmediate存在,所以总是会先执行setImmediate!

补充说明事件环: