单/多线程,同/异步,阻塞/非阻塞
https://developer.aliyun.com/lesson_1730_14094#_14094
单/多线程
早上上班,正要打卡的时候,手机响了。。如果先接了电话,等接完了,在打卡,就是单线程。
如果一手接电话,一手打卡。就是多线程。
多线程同步式(多线程阻塞式)(async)
当线程1在执行遇到I/O操作时通常要耗费比较长的时间(CPU发送指令让硬盘控制器去读取数据,发送完指令到硬盘控制器读取完数据这段时间,CPU都是空闲的),这时候就需要剥夺当前线程1的CPU控制权,让别的线程2先执行,这种线程调度方式称为阻塞。在线程1的I/O操作结束后,又恢复线程1的CPU控制权,继续线程1。这种I/O模式就称为同步式或阻塞式

异步(非阻塞)
不用等待前面的执行完,直接往后执行

如图中执行顺序:
console.log('Hi')指令被放到栈stack中,执行完毕立即弹出。
setTimeout(function() {
console.log('three')
}, 0)
web底层提供计时器API,方法被存到WEB APIS中计时,因为时间为0,故立即被放到队列(queue),等待栈中所有同步任务执行完了再进入栈中执行
因为三件log事件几乎同时放入栈中,又log('three')被判定为异步事件,放到了队列里,故要其它留在栈中的任务执行完了,log('three')才有机会执行
为了处理异步任务,必须有事件循环(event loop)不断检查是否有未完成的事件,并予以处理
单线程异步

js点击/网络请求/计时器都是异步事件
NodeJs是单线程的,需要异步
浙公网安备 33010602011771号