psasp 36节点单线图_小猿圈分享-为什么Javascript要采用单线程的设计?

相信我们在用JavaScript的时候都有过这么个疑惑,为什么javascript是单线程的呢,这样有什么好处,为什么不是其他的呢,今天小猿圈就给大家分享一下,为什么是这样呢,大家要看清楚哦。

一、为什么 JavaScript 单线程

假定JavaScript同时有两个线程,一个线程在某个DOM节点上添加内容,另一个线程删除了这个节点,这时浏览器应该以哪个线程为准?

为了避免复杂性, JS 采用了单线程的模式,也就是一次只能执行一个程序

二、事件机制(观察者模式)

其实 JS 是一直有两个线程在跑,只不过一个负责跑我们写的主程序,另一个线程负责事件任务的监听并在需要响应的时候发起通知。下面请看图一:

图1 事件机制说明

277edbe6a01406f3a0a70ad7ecaf50ae.png

由图一我们很直观的看出了 JS 分为了两个线程,主线程中的主程序部分,就是非常规则的按照单线程的方式一行一行的去运行我们编写的非事件函数里的 JS 代码。

而在主程序的黄色部分,则是碰到了需要注册的事件代码,图中以 onclick 为例子,这时主程序就会在事件监听表里添加一条 onclick 的监听。这时候,次线程就开始去监听事件的行为了。当次线程监听到这个事件所绑定的元素被点击后,就会发出通知(在事件任务队列里插入一条需要想要的事件)。之后次程序就一直做这个事。

主线程中,等到主程序执行完毕后,系统就会读取"任务队列",如果发现有事件,则执行。否则继续读取"任务队列"直到下一个事件出现。

ps:图中事件函数部分,绿色为等待事件任务出现,红色部分为正在执行的事件函数。

主线程和次线程的流程:

主线程

1.主程序的执行

2.系统就会读取"任务队列"

3.如果发现有事件出现,则执行,否则重复2

4.程序结束或者事件监测注册表为空的时候退出

ps:只要主线程空了,就会去读取"任务队列",这就是JavaScript的运行机制。这个过程会不断重复。

次线程

1.根据事件监测注册表的内容进行监听

2.发现事件监测注册表的内容得到结果,则发起通知(在事件任务队列里插入一条需要想要的事件)

3.重复1、2

二、为什么这样的 JS 高效率

单线程就意味着,所有任务需要排队,前一个任务结束,才会执行后一个任务。如果前一个任务耗时很长,后一个任务就不得不一直等着。

如果排队是因为计算量大,CPU忙不过来,倒也算了,但是很多时候CPU是闲着的,因为IO设备(输入输出设备)很慢(比如Ajax操作从网络读取数据),不得不等着结果出来,再往下执行。

JavaScript语言的设计者意识到,这时主线程完全可以不管IO设备,挂起处于等待中的任务,先运行排在后面的任务。等到IO设备返回了结果,再回过头,把挂起的任务继续执行下去。

JS 运行时 CPU 和各个硬件资源都被充分的利用了(异步事件机制)。而一门语言效率是否高,主要就是看对资源怎么合理分配的,因为计算机的总计算能力是有限,只要让每个硬件减少等待时间,充分利用好资源,就可以高效率,而 JS 就是这么一门语言。

而有些人则会疑问,为什么 JAVA 语言运行效率比这个高的,这就得归结到,JS 是一门解释语言,没有编译等,所以执行的过程需要翻译等,这些都是需要系统的开销的。而解释效率是否高等,就要看 JS 引擎的解释效率了。

好了不知道大家有没有理解呢,今天的分享就到这了,大家有什么不明白的可以到小猿圈网站学习,加油哦。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
电力系统的分析和计算中,需要不同网络结构和参数。在应 用这些参数之前,收集和整理工作会花费大量的时间和精力。在 此,我们将一些在工作中常用的数据集中在一起,借助现代网络 的技术,供大家参考和使用。提高广大学生,工作人员和研究人 员的效率。 在初步阶段,我们将集中一些典型的潮流数据,主要内容包 括:潮流数据格式说明,潮流数据,潮流结果。在尽可能的情况 下提供网络结构图,并提供数据的出处,以及我们对其潮流计算 和结果的一些感受。 我们主要收集了一些国际上公开和通用的试验系统的数据。 我们的目的是使得我们的研究工作更加国际化,同时也使我国的 研究工作得到国际同行的接受和承认。 目前有: 系统规模 潮流数据 (稳定数据) TH IEEE BPA EUROSTAG 3Bus- 2Gen 有(有) 有 有(有) 有(有) 5Bus- 2Gen 有 有 有 有 9Bus- 3Gen 有(有) 有 有(有) 有(有) 10bus- 3Gen 有 有 有 有 C.W.Taylor 11Bus- 1Gen 有 有 有 有 13Bus- 6Gen 有 有 有 有 IEEE14 有 有 有 有 IEEE30 有 有 有 有 IEEE39-10Gen 有(有) 有 有(有) 有(有) 43Bus- 5Gen 有 有 有 有 IEEE57 有 有 有 有 IEEE118 有 有 有 有 145Bus-50Gen 有(有) 有 有(有) 有(有) 162Bus-17Gen 有(有) 有 有(有) 有(有) IEEE300 有 有 有 有 文件夹的名称表示系统母线数,如011_bus表示该文件夹中是 有关11母线系统的资料;文件名称后缀表示相应的内容:dat是 系统的原始数据,res是系统的结果,mac是可以进行暂态稳定计 算的,数据的文件都是用记事本制作的;其它包括系统图在说明中; 带th的指清华格式,带ieee的指IEEE格式,带edf的指EUROSTAG格 式,带bpa的指BPA格式。 清华格式参看文件夹中的“th数据格式说明”。 IEEE格式说明参看IEEE TRANS on PAS, Vol-92, No.6, Nov./Dec., 1973, pp. 1916-1925, "Common Format For Exchange Of Solved Load Flow Data"。 EUROSTAG格式说明参看EUROSTAG的User's manual(Tractebel (Energy Engineering))。 在允许的情况下,我们将对数据不断扩充,并及时维护。以 后将加入BPA, PSASP(综合稳定程序), IEEE, EUROSTAG(EDF) 等 格式。如果你们已经整理过,希望能和我们联系,使数据更完整。 如有错误,概不负责。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值