进程的9个问题

  1. 什么是同步异步
  2. 什么是异步IO
  3. 什么是阻塞非阻塞
  4. 什么是事件循环与事件驱动
  5. 什么是单线程
  6. 什么是进程
  7. 什么是子进程
  8. 怎么样来启动子进程
  9. 进程间如何通信

同步异步与阻塞


const doSync = (sth, time) => new Promise(resolve => {
    setTimeout(() => {
        console.log(sth + '用了' + time + '毫秒')
        resolve()
    }, time)
})

const doAsync = (sth, time, cb) => {
    setTimeout(() => {
        console.log(sth + '用了' + time + '毫秒')
        cb && cb()  // 如果有回调的话,就执行回调函数
    }, time)
}

const doElse = (sth) => {
    console.log(sth)
}

const Scott = { doSync, doAsync }
const Meizi = { doSync, doAsync, doElse }

;(async () => {
    // 同步
    console.log('case1: 妹子来到门口')
    await Scott.doSync('Scott 刷牙', 1000)
    console.log('啥也没干,一直等')
    await Meizi.doSync('妹子洗澡',2000)
    Meizi.doElse('妹子去忙别的了')

    // 异步
    console.log('case3: 妹子来到门口按下通知开关')
    Scott.doAsync('Scott 刷牙', 1000, () => {
        console.log('卫生间通知妹子来洗澡')
        Meizi.doAsync('妹子洗澡', 2000)
    })
    Meizi.doElse('妹子去忙别的了')


})()

event loop 6个阶段

const { readFile } = require('fs')
const EventEmitter = require('events')

class EE extends EventEmitter {}

const yy = new EE()

yy.on('evnet', () => {
    console.log('出大事了!')
})

setTimeout(() => {
    console.log('0 毫秒后到期执行的定时器回调')
},0)

setTimeout(() => {
    console.log('100 毫秒后到期执行的定时器回调')
},100)

setTimeout(() => {
    console.log('200 毫秒后到期执行的定时器回调')
},200)

readFile('../package.json','utf-8', data => {
    console.log('完成文件 1 读操作的回调')
})

readFile('../README.md','utf-8', data => {
    console.log('完成文件 2 读操作的回调')
})

setImmediate(() => {
    console.log('immediate 立即回调')
})

process.nextTick(() => {
    console.log('process.nextTick 的回调')
})

Promise.resolve()
    .then(() => {
        yy.emit('evnet')

        process.nextTick(() => {
            console.log('process.nextTick的第2次回调')
        })
        console.log('Promise 的第 1 次回调')
    })
    .then(() => {
        console.log('Promise 的第2次回调')
    })

输出结果:

process.nextTick 的回调
出大事了!
Promise 的第 1 次回调
Promise 的第2次回调
process.nextTick的第2次回调
0 毫秒后到期执行的定时器回调
immediate 立即回调
完成文件 1 读操作的回调
完成文件 2 读操作的回调
100 毫秒后到期执行的定时器回调
200 毫秒后到期执行的定时器回调

参考地址
https://nodejs.org/en/docs/guides/event-loop-timers-and-nexttick/

发布了69 篇原创文章 · 获赞 96 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_40693643/article/details/102529092
今日推荐