javascript编程单线程之同步模式
支流的js
环境都是单线程吗模式执行js 代码, js
采纳为单线程的起因与最开始设计初衷无关,最早是运行在浏览器端的脚本语言,目标是为了实现页面上的动静交互,实现页面交互的外围就是dom
操作,这也就决定了js
必须应用单线程的模式来解决,不然就会造成重大的线程同步问题。如果js
多个线程同时批改dom
元素,此时浏览器就无奈明确以那个线程的后果为准,为了防止这种线程同步问题,所以从一开始js就被设置成了单线程模式工作。这里所说的单线程指的是javascript执行环境中负责执行代码的线程只有一个
。
能够设想成只有一个人来执行工作,一个人一次只能执行一个工作,如果有多个工作就须要排队顺次去实现。这种模式最大的长处是更平安更简略,毛病也很显著,遇到某一个特地耗时的工作前面的工作就须要等这个工作的完结,这也就导致整个程序的执行的迁延,呈现假死的状况。
- 长处:更平安、更简略
耗时工作会呈现程序假死的状况
为了终局耗时工作的问题,
javscript
把 工作的执行分了两种模式,别离是- 同步模式(
Synchoronous
) - 异步模式(
Asynchronous
)
同步模式Synchoronous
代码顺次执行,后一个工作要期待前一个工作执行实现,同步执行比较简单,代码的执行程序就是代码的程序。单线程大部分都是同步模式。
Console
是输入的打印,Call stack
是执行栈
开始执行 js 会把咱们的整体的代码加载进来并放到一个匿名函数外面执行,而后逐行开始执行,
第一行 执行会把 console.log('global begin')
压入调用栈中,控制台打印global begin
执行完结,弹出调用栈
接下来是两个函数的申明,函数的申明不会产生调用所以接着往下执行
接下来是一个foo
函数的调用,会把 foo
压入调用栈,foo
函数打印了一个音讯,接着执行了 bar
函数,bar
函数也会被放入执行栈中,bar
函数执行过程中又打印了一次,bar
执行结束弹出调用栈,紧接着 foo
函数也执行完结,弹出调用栈
最初打印了一个音讯,也是一样的压栈,整体代码执行完,执行栈就会被清空掉
这种排队执行的机制下某行代码执行工夫过长,前面的工作就会被提早。咱们把这种提早称为阻塞,这种阻塞对于用户而言会有页面卡顿或者叫卡死,所以须要异步模式来解决程序中无奈防止的耗时操作,比方ajax
操作,或者nodejs
中的大文件读写
原文地址:https://kspf.xyz/archives/18
更多内容微信公众号搜寻充饥的泡饭
小程序搜一搜开水泡饭的博客