什么是Event Loop 以及简单应用

Event Loop是计算机的一种运行机制,js就采用这一机制来解决单线程带来的问题。

运行以后的程序叫做进程,一个进程一次只能执行一个任务

如果有很多任务要执行,解决办法:

  • 排队。等前面的任务执行完再执行后面的
  • 新建进程。为每一个任务新建一个进程
  • 新建线程。新建进程太浪费资源,一个进程包含多个线程,由线程去完成任务

1 同步模式或者阻塞模式

绿色的部分代表运行,红色的部分代表等待在这里插入图片描述

2 多线程

这样会浪费多倍的资源,也会闲置多倍资源
在这里插入图片描述

3 Event Loop

他是在程序中运行两个线程,一个负责程序本身的运行,称为 :主线程 ;另一个线程负责主线程与其他进程的通信被称为Event Loop 消息线程。

在这里插入图片描述
原理:

异步模式或非堵塞模式:

绿色运行,橙色空闲,每当遇到I/O ,主线程就让Event Loop去通知相应的I/O程序,然后接着往下运行,不存在红色的等待时间,等I/O程序完成操作,Event Loop把结果返回给主线程,主线程调用事先设定好的回调函数完成整个任务。

小试牛刀:
1

	setTimeout(() => {
	 console.log("setTimeout1")
	 Promise.resolve().then(data => {
		console.log('222')
})
})

	setTimeout(() =>{
	  console.log("setTimeout2")
})

	 Promise.resolve().then(data => {
		console.log('111')
})
	

输出结果为:
111
setTimeout1
222
setTimeout2

2

	console.log('script start')
	
	setTimeout(()=>{
	console.log('setTimeout --- 0')
	},0)
	
	setTimeout(()=>{
	console.log('setTimeout --- 200')
	setTimeout(()=>{
	console.log('inner-setTimeout --- 0')
})
	Promise.resolve().then(function(){
	console.log('promise5')
})
	},200)
	
Promise.resolve().then(function(){
	console.log('promise1')
}).then(function(){
	console.log('promise2')
})

Promise.resolve().then(function(){
	console.log('promise3')
})

console.log('script end')

输出结果为:
script start
script end
promise1
promise3
promise2
setTimeout—0
setTimeout—200
promise5
inner-setTimeout—0

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值