介绍
时间循环是node最重要的知识点之一,因为node是单线程的,但是能够做到异步非阻塞IO,就是因为有事件循环
node特点:
node是单线程的,代码运行在单线程上,每次只处理一件事,正式因为单线程,所以node编程并不需要考虑太多的线程并发的问题,秩序要编辑代码并注意不要出现阻塞现成的事情就可以。
阻塞事件循环
任何需要花费大量时间才能将控制权交还该事件循环的js代码,都会阻塞页面中任何js代码的执行,升值阻塞UI
为了解决这种问题,所以,在node中使用了大量的回调函数
调用堆栈
调用堆栈是一个LIFO队列,后进先出
事件循环会不断的调用堆栈,检查以看是否需要运行任何元素;当执行时,它会将找到的所有函数调用添加到调用堆栈中,并按顺序执行每个函数。每次迭代中的事件循环都会查看调用堆栈中是否有东西并执行它直到调用堆栈为空:
const bar = () => console.log('bar')
const baz = () => console.log('baz')
const foo = () => {
console.log('foo')
setTimeout(bar, 0)
baz()
}
foo()