NodeJs 做了什么 Fundamentals Internals

47 阅读1分钟

NodeJs 做了什么

image.png

image.png

image.png

image.png

image.png

code

image.png

node 代码实现

image.png

image.png

libuv 库代码实现

image.png

image.png

image.png

sync vs async

// sync

console.log('🐰 win!');

console.log('🐢 win!');

 

// async

setTimeout(() => {

console.log('🐰 win!');

},1000)

console.log('🐢 win!');

non-blocking functions 非阻塞函数

image.png

image.png

image.png

image.png

async js ?

image.png

image.png

异步操作

线程 threads

image.png

两个线程在执行方面是互相独立的

node is single thread

image.png

nodejs 如何实现异步功能的?

event loop + libuv (deal file + network 调用操作系统功能)

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

Event Loop

image.png

image.png

顺便提一下 python 和 php 都可支持多线程

什么时候 使用 Node 最好

image.png

image.png

image.png


// 1 base

// const EventEmitter = require('events')

// const celebrity = new EventEmitter()

 

// // 监听

// celebrity.on('race win', () => {

// console.log('you has win best!');

// })

 

// celebrity.on('race fail', () => {

// console.log('can do better!');

// })

 

// // 触发

// celebrity.emit('race win')

// celebrity.emit('race fail')

 

// 2 advantage 传递 参数

const EventEmitter = require('events')

const celebrity = new EventEmitter()

 

celebrity.on('race', (result) => {

if(result === 'win'){

console.log('win your best!');

}

})

 

celebrity.on('race', (result) => {

if(result === 'lost'){

console.log('can do better!');

}

})

 

celebrity.emit('race', 'win')

celebrity.emit('race', 'lost')