//同步(一个任务挨着一个任务执行),如:
let res1=fn()
let res2=fn()
//res2的结果产生,要等到res1的结果产生了之后
//异步:要处理某个业务,他自己产生数据以后,通知你去使用数据(你不知道它什么时候产生数据)
//这种设计常见于回调函数(回调函数是异步操作的一种体现,不能说异步操作就是回调函数)
function fn(cb){
for(var i=0;i<100;i++){
}
//fn内部产生的数据传给回调函数用
cb(i)//在这里调函数,就是通知你使用数据
//(在调用fn函数的时候,传入一个函数作为参数,叫做回调函数,回调函数的功能是可以自己设计的)
}
//下面代码就是异步操作(异步阻塞了,因为需要等到有数据了才执行)
fn((data)=>{
console.log(data);
})
//阻塞:有多个任务时,一个任务一个任务的处理,会出现等待
let temp='abcd'
for(let i=0;i<100000;i++){
temp+=i
}
console.log(1111);
let temp2='efgh'
for(let i=0;i<100;i++){
temp2+=i
}
console.log(2222);
//在上面代码中,由于第一个for循环处理时间长,会阻塞后面的第二个for循环(即使第二个任务跑的快)
//非阻塞:有多个任务时,开启子线程,多个任务同时处理,不会出现等待
//比如既听歌又看电影,声音同时都有
//同步阻塞:一个任务一个任务的处理,每个任务得等待它产生结果
let res1=fn()
let res2=fn()
//异步非阻塞
fn((data)=>{})
//如:读取文件的回调函数,就是异步的非阻塞线程的
fs.readFile(path,(err,data)=>{
console.log(data);
})
//同步非阻塞:多个任务同时处理,每个任务谁先出结果,谁就先通知你去使用
//既不阻塞线程,又是同步写代码(async await就很好的实现了化异步为同步)
//同步非阻塞是最好的
//fs模块中所有的异步方法,都有一个对应的同步方法(同步,但阻塞)
let data=fs.readFileSync('path')
同步异步,阻塞非阻塞
最新推荐文章于 2021-05-15 15:55:56 发布