同步异步,阻塞非阻塞

//同步(一个任务挨着一个任务执行),如:
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')



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值