加入收藏 | 设为首页 | 会员中心 | 我要投稿 南通站长网 (https://www.0513zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长资讯 > 传媒 > 正文

央行数字货币是一种演化

发布时间:2021-02-07 11:29:49 所属栏目:传媒 来源:互联网
导读:G的更大价值和更广阔空间在于支持国民经济各垂直行业的转型升级,5G专网由于能够针对垂直行业多样化的需求进行定制,成为达到这一目的核心手段。不过,行业用户的多样化需求,也赋予了大量群体投身于移动通信网络的机会,5G网络的投资和运营群体呈现多元化,
G的更大价值和更广阔空间在于支持国民经济各垂直行业的转型升级,5G专网由于能够针对垂直行业多样化的需求进行定制,成为达到这一目的核心手段。不过,行业用户的多样化需求,也赋予了大量群体投身于移动通信网络的机会,5G网络的投资和运营群体呈现多元化,不再是电信运营商专属,因此运营商面对着多元化主体的竞争。对于投资和运营着5G公共网络的运营商来说,5G虚拟专网不仅能提升其通信管道价值,也是其应对5G专网多元化竞争的而重要手段。

此时网络线程会接受到这个任务执行下载操作,当网络线程把文件下载完毕之后,就将下载的结果封装成一个事件任务,放入到消息队列中。当主线程执行到这个任务时,就知道网络线程已经下载完了,然后将下载的结果呈现给用户。

最后

好了,今天主要和大家分享了 JavaScript 中回调函数的由来和异步回调函数的设计,这也是 V8 引擎中的一小部分,接下来会通过这样一个个的知识点,挖掘 V8 谷歌引擎的各个方面的优秀设计方案。
 

谷歌 V8 团队为了解决这个问题,那么就引入了消息队列。

消息队列

有了消息队列,我们把所有产生的事件,无论是 JavaScript 产生的事件还是用户点击页面交互产生的事件,都统一按照先后循序放到消息队列中,那么 UI 线程就不断的循环这个消息队列,有任务就取出来去执行。

有了消息队列之后,这个主线程就可以有序的执行各种事件任务了。

异步任务什么时候调用?

还是上述的 setTimeout 异步回调函数的例子,假如当前线程在消息队列中取出 setTimeout 这段代码执行,发现 fn 这个任务是在 1000 ms 后执行的,1000 ms 过后,主线程就会将 fn 封装成一个事件任务扔到消息队列中去等待被执行。

等消息队列中的执行到一定的时机,就会取出这个被封装过的 fn 回调函数任务,在主线程中被执行。

这个理解起来并不是很难,但是有一类回调函数比较特殊。当主线程在消息队列中取出一个网络下载的任务时,网络下载比较耗时,我们不可能让它在主线程中阻塞其他任务执行,所以主线程就会交给网络线程去执行这个下载任务,然后主线程回继续有序的在消息队列中取出其他任务执行。
 

那么问题来了,当我们把 JS 设计到 UI 页面线程,就会出现一个问题,当用户通过页面交互产生一个事件时,如果当前的线程正在处理其他的任务,那么这个交互事件需要等当前 UI 线程的任务处理完毕才能被处理,所以这样设计比较鸡肋。

如果当前 UI 线程一直执行其他任务,那么这个用户的交互事件任务一直不被处理,会出现页面点击无效的假象。
 

述代码中,settimeout 的第一个参数 fn 是传入的一个回调函数,当程序执行 1000 ms 的时候,此时这个回调函数被调用,而且是在 setTimeout 函数外部被调用的,我们称 fn 为异步回调函数。

JS 线程架构

上述的问题理解起来非常简单,尤其是同步回调函数。但是对于异步回调函数什么时候被调用的,是在什么位置被调用的,我们目前是非常模糊的。

所以要想知道异步回调函数的调用时机和位置,我们需要理解 JS 的线程架构,比如消息队列、事件循环,从根上理解 JS 是如何设计这些东西的。

JS 的最初设计是单线程的,所谓的单线程就是同一时间只能干一件事情,而且 JS 运行的这个单线程就是页面的 UI 线程,毕竟 JS 为了能够更方便的操作 DOM 嘛。

(编辑:南通站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读