• 异步


    setTimeout(function(){
        console.log('立即执行setTimeout');
    }, 0); 
    
    var d = new Date().getTime(); 
    
    while(true) { 
    	var dd = new Date().getTime(); 
    	if( ( dd - d ) > 1000 *10 ) { 
    		console.info( '主任务循环10s后结束' ); 
    		break; 
    	}  
    } 
    
    console.info('主任务结束'); //主任务
    
    • 以上执行结果如下
    VM446:10 主任务循环10s后结束
    VM446:15 主任务结束
    undefined
    VM446:2 立即执行setTimeout
    
    setTimeout(function(){
        console.log('立即执行setTimeout');
    }, 0); 
    
    var p = new Promise(function(resolve){
    	resolve("promise回调产生");
    });
    
    p.then(function(value){
    	console.info('异步Promise执行' + value);
    });
    
    var d = new Date().getTime(); 
    
    while(true) { 
    	var dd = new Date().getTime(); 
    	if( ( dd - d ) > 1000 *10 ) { 
    		console.info( '主任务循环10s后结束' ); 
    		break; 
    	}  
    } 
    
    console.info('主任务结束'); //主任务
    
    • 以上执行结果
    VM440:18 主任务循环10后结束
    VM440:23 主任务结束
    VM440:10 异步Promise执行promise回调产生
    undefined
    VM440:2 立即执行setTimeout
    

    同步任务

    • 主任务执行
    • 将主任务执行过程的异步任务加入任务队列
    • 主任务执行完成后,执行异步任务队列

    异步任务

    • javascript 事件循环并发模型

    • setTimeout 和 promise都是异步任务

    • 异步任务都是通过任务队列进行管理和调度

    • 更多...

    • 任务队列又分为 MacroTask Queue{宏任务} 和 MicroTask Queue{微任务}

    • 宏任务: setTimeout, setInterval , setImmediate, requestAnimationFrame , NodeJS中的I/O...

    • 微任务: 独立回调任务 | 复合回调任务

    • 微任务之独立回调任务 [ Promise ] 其成功与失败的回调函数相互独立

    • 微任务之复合回调任务 [ Object.observe, MutationObserver 和NodeJs中的process.nextTick] 不同状态的回调函数在同一个函数体

    执行过程

    • 依次执行同步代码直至执行完毕
    • 检查宏任务队列,若有触发的异步任务,则取第一个并调用器事件处理函数,然后跳转至第三步,若没有需要处理的异步任务,则直接第二步
    • 检查微任务,然后执行所有已经触发的异步任务,一次执行事件处理回调函数,直至执行完毕,然后调到第二步,若没有需要处理的异步任务,则直接返回第二步,依次执行后续步骤
    • 如此往复,若所有异步任务处理完毕,则结束;
    • 微任务优于宏任务
  • 相关阅读:
    JdbcTemplate增删改查案例
    顾问和注解
    使用多种方式实现AOP
    面试题
    Spring Bean的生命周期和作用域
    IOC和AOP交互拓展(二)
    AOP
    错题
    Spring核心概念
    hadoop-MapReduce框架原理之OutputFormat数据输出
  • 原文地址:https://www.cnblogs.com/pengsn/p/13150498.html
Copyright © 2020-2023  润新知