• 关于 微任务 和 宏任务的一些机制


    1.  promise 和 setTimeout设置时间为 0ms[或者不设置]  那个先运行?
     1 setTimeout(function(){
     2     console.log('定时器开始啦')
     3 });
     4 
     5 new Promise(function(resolve){
     6     console.log('马上执行for循环啦');
     7     for(var i = 0; i < 10000; i++){
     8         i == 99 && resolve();
     9     }
    10 }).then(function(){
    11     console.log('执行then函数啦')
    12 });
    13 
    14 console.log('代码执行结束');

    //output:
    //马上执行for循环啦
    //代码执行结束
    //执行then函数啦
    //定时器开始啦


    这玩意就涉及带js的运行机制了  由于js 是单线程的  做事情就需要排队  这样就会造成阻塞  这是 机智的人类就想到了异步; 我在某些地方看到 在js中像写回调函数可以写出来,但异步主要是通过一些想什么 addEventListener (听说这个好像是的) ,setTimeout,....之类来实现异步 [ 顺便插一句 异步函数一定在同步语句执行之后在执行 而且 异步函数里面一定有回调 但回调函数不一定是异步 ]  ;

    说到异步 就要说到 event loop 刚开始我以为这就是 for循环之类的玩意儿.

    event loop[事件循环]

    同步的东西都在主线程执行,而异步则是进入了一个 任务线程 那么此时就产生了一个疑问 这多开了一个任务队列 

    ① 所有同步任务都在主线程上执行,形成一个执行栈(execution context stack)。

    ② 主线程之外,还存在一个‘任务队列’(task queue)。只要异步任务有了运行结果,就在”任务队列”之中放置一个事件。

    ③ 一旦主线程的栈中的所有同步任务执行完毕,系统就会读取任务队列,选择需要首先执行的任务然后执行。

    这也算是 js 中异步的实现机制了吧; 然而问题 往往没那么简单  异步任务里面 又分为 微任务和宏任务 真的够了;

    宏任务):* script全部代码、setTimeoutsetIntervalsetImmediate....

    微任务):* Process.nextTick(Node独有)Promise.... 

    这里就有一个规定 微任务始终在宏任务之前执行  [她就是执行的 记住就完事了]

    2 js.堆 栈 队列 

    堆:     堆是指一块已分配的用来存储所需数据的存储空间

    栈 (先进后出);  可以看作一个按照顺序排列的消息数据集合。
     
    队列 : 可以看作是指一个按照顺序排列的消息事件集合。 (先进先出)
  • 相关阅读:
    mybatis框架-用类映射返回结果
    ArrayLLis 线程不安 实验
    快速求幂运算笔记
    nyoj 56 阶乘中素数的个数
    求正整数n所有可能的和式的组合(如;4=1+1+1+1、1+1+2、1+3、2+1+1、2+2
    synchronize学习
    nyoj 找球号三(除了一个数个数为基数,其他为偶数,编程之美上的)
    递归判断一个数是否递增
    快速排序c++
    x&-x
  • 原文地址:https://www.cnblogs.com/diligent-noob/p/12787010.html
Copyright © 2020-2023  润新知