精华内容
下载资源
问答
  • js线程

    2018-09-15 12:57:00
    js引擎线程(解释执行代码,用户输入,网络请求) GUI线程(绘制用户页面,与js主线程是互斥的(页面也有加载完不能进行操作)) 异步线程: http网络请求线程:处理用户的get,post等请求,等返回结果后将回调...

    浏览器常驻线程:

    js引擎线程(解释执行代码,用户输入,网络请求)

    GUI线程(绘制用户页面,与js主线程是互斥的(页面也有加载完不能进行操作))

    异步线程:

    http网络请求线程:处理用户的get,post等请求,等返回结果后将回调函数推入任务列队中

    浏览器事件处理线程(将click,mouse等交互事件发生后将这些事放入任务队列中)

     

    js执行机制:单线程

    单线程:同一时间只能做一件事

    疑问:为啥JS引擎是不多线程:

    js设计出来就是为了与用户交互,处理DOM,假如js是多线程,同一时间一个线程需要修改DOM,另外一个线程想要删除DOM,问题就变得复杂了许多。浏览器不知道听谁的,如果引入‘“锁”的机制,这不就又回到被其他语言尴尬的困境了么

    单线程的计算能力有限,大量的数据需要计算渲染的话,我们可以配合后端操作,如VUE和node.js的配合,也就是传说中的SSR技术

    js是基于单线程运行的,同时又是可以异步执行的,一般来说这种即是单线程又是异步的语言都是基于事件来驱动的。恰好浏览器给js提供了这么一个环境。

    同步任务:

    function foo(){
        console.log('foo')
        function bar(){
            console.log('bar')
        }
        bar()
    }
    foo()

    0,代码没有执行的时候,执行栈为空。

    1,foo函数执行时,创建一帧,这帧里包含了形参,局部变量(预编译过程),然后把这些压入栈中

    2,然后执行foo内代码,执行bar函数

    3,创建新帧,同样有形参,局部变量,压入栈中

    4,bar函数执行完,弹出栈

    5,foo函数执行完,弹出栈

    6,栈为空

    异步任务:

    $.ajax({
        url:'xxx',
        data:{},
        success:function(data){
            console.log(data)
        }
    });
    console.log('run')

    举例ajax请求

    0,ajax进入Event Table ,并注册回调函数success()

    1,执行console.log('run')

    2,ajax事件完成http网络请求,线程把任务放入Event Queue中

    3,主线程(调用栈)读取任务下执行success函数

     

    未完待续。。。。。。

     

     

     

     

    展开全文
  • 一个轻量级的 javascript 线程实现 用法 可以使用传统的脚本标签将threads4js包含在页面中 < script src =" threads4js.js " > </ script > 或需要为CommonJS的风格模块,由预编译或不具有预编译在线...
  • Async.js 是一个用于 javascript 的小型线程库。 我发现了一些其他线程库,但它们都非常复杂。 因此,我着手创建一个小型且易于使用的库。 Async.js 使用内联网络工作者,但将所有困难的东西从你身上抽象出来。 ...
  • 再谈JavaScript线程

    2020-10-23 22:55:41
    继上篇讨论了一些关于JavaScript线程的知识,我们不妨回过头再看看,是不是JavaScript就不能多线程呢?看下面一段很简单的代码(演示用,没考虑兼容问题):
  • 线程和单线程的概念: 线程:是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条...为什么JS是单线...
    线程和单线程的概念:

    线程:是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。

    单线程:(上面有说:一条线程指的是进程中一个单一顺序的控制流)就是在进程中只有一条线程,在程序执行时,所走的程序路径按照连续顺序排下来,前面的必须处理好,后面的才会执行。。

    为什么JS是单线程?

    引用阮一峰老师的回答 —> JavaScript的单线程,与它的用途有关。作为浏览器脚本语言,JavaScript的主要用途是与用户互动,以及操作DOM。这决定了它只能是单线程,否则会带来很复杂的同步问题。比如,假定JavaScript同时有两个线程,一个线程在某个DOM节点上添加内容,另一个线程删除了这个节点,这时浏览器应该以哪个线程为准?

    所以,为了避免复杂性,从一诞生,JavaScript就是单线程。

    js的工作机制:

    当线程中没有执行任何同步代码的前提下才会执行异步代码,setTimeout是异步代码,所以setTimeout只能等js空闲才会执行,但死循环是永远不会空闲的,所以setTimeout也永远不会执行。即使setTimeout为0,他也是等js引擎的代码执行完之后才会插入到js引擎线程的最后执行。

    浏览器的内核机制:

    浏览器的内核是多线程的,一个浏览器一般至少实现三个常驻线程:

    1、 javascript引擎:是基于事件驱动单线程执行的,JS引擎一直等待着任务队列中任务的到来,然后加以处理,浏览器无论什么时候都只有一个JS线程在运行JS程序。

    2、GUI渲染线程:负责渲染浏览器界面,当界面需要重排、重绘或由于某种操作引发回流时,该线程就会执行。但需要注意 GUI渲染线程与JS引擎是互斥的,当JS引擎执行时GUI线程会被挂起,GUI更新会被保存在一个队列中等到JS引擎空闲时立即被执行。

    3、事件触发线程:当一个事件被触发时该线程会把事件添加到待处理队列的队尾,等待JS引擎的处理。这些事件可来自JavaScript引擎当前执行的代码块如setTimeOut、也可来自浏览器内核的其他线程如鼠标点击、AJAX异步请求等,但由于JS的单线程关系所有这些事件都得排队等待JS引擎处理。

    单线程和异步

    看过很多关于 JavaScript 单线程与异步的介绍,大多数都引用这一类例子来说明:单线程就是排队,前一个任务不完成后一个就不能开始,也就是常说的串行。 饭店点餐,所有人排队,A顾客点完之后,厨房开始做,做完后A领到餐后,B再开始点餐,厨房又开始做…周而复始,这就是同步,点餐的时候厨房是闲着的,做菜的时候前台是闲着的。即单线程。所有人都能够很好的理解,这样做效率太低了!

    换个思路,A点完餐后,到一旁等着,服务员将菜单递给厨房,厨房开始做,然后继续服务B顾客,当A顾客的餐做好之后,A来队伍里插个队,把餐领走。 听到这里,效率高了很多嘛,整个餐厅没有浪费一点工作力,大家都各司其事。然后作者就下了结论,这就是 JavaScript 的单线程与异步。

    关于单线程和异步暂时就先记录这些东西,后续会补充其他像event loop等相关知识。内容如有不准确,欢迎大家提出宝贵意见~~~

    展开全文
  • 浏览器UI线程js线程

    千次阅读 2017-01-24 23:10:16
     通常一个浏览器会至少存在三个线程JS引擎线程(用于处理JS)、GUI渲染线程(用于页面渲染)、浏览器时间触发线程(用于控制交互)。  而因为JS可以操作DOM元素,进而会影响到GUI的渲染结果,因此JS引擎线程与...
    浏览器中的线程介绍

          通常一个浏览器会至少存在三个线程:JS引擎线程(用于处理JS)、GUI渲染线程(用于页面渲染)、浏览器时间触发线程(用于控制交互)。

         而因为JS可以操作DOM元素,进而会影响到GUI的渲染结果,因此JS引擎线程与GUI渲染线程是互斥的。也就是说当JS引擎线程处于运行状态时,GUI渲染线程将处于冻结状态。

         JS引擎是基于事件驱动,采用的是单线程运行机制。即JS引擎会只会顺序的从任务列表中取任务,并执行。

         SetTimeout/SetInterval

        其中SetTiemout:在指定的毫秒数后调用指定的代码段;SetInternal:在指定的时间间隔内(ms)循环调用指定的代码段。这两个函数内都涉及到时间计数器,也就是都涉及到一个类似与MFC定时器。JS引擎本身就只能单线程运行,因此定时器需要由其他的外部线程来启动。所以对JS引擎而言,定时器线程可以被视为异步线程。但当定时器时间到达后,所触发的事件则必须在任务列表中排队,等候JS引擎的处理。
         关于setTimeout下面有一个例子,可以帮助深入理解:

            setTimeout(function () { while (true) { } }, 1000);
            setTimeout(function () { alert('end 2'); }, 2000);
            setTimeout(function () { alert('end 1'); }, 100);
            alert('end');

          执行的结果是弹出‘end’‘end 1’,然后浏览器假死,就是不弹出‘end 2’。也就是说第一个settimeout里执行的时候是一个死循环,这个直接导致了理论上比它晚一秒执行的第二个settimeout里的函数被阻塞,这个和我们平时所理解的异步函数多线程互不干扰是不符的。

     

     

     



    (1)UI线程

    (2)JS线程

    (3)事件(触发)线程

     

     

     

     

     

    引用的网页:

    例子:

    http://www.cnblogs.com/jeffwongishandsome/archive/2011/06/13/2080145.html

    w3c给出的SetTimeout/SetInternal的函数介绍及使用示例

    http://www.w3school.com.cn/htmldom/met_win_settimeout.asp

    http://www.w3school.com.cn/htmldom/met_win_setinterval.asp

    JS的多线程介绍(里面画了一张介绍任务队列机制的原理图,图画的清楚,解释的也很清楚)

    http://blog.csdn.net/nx8823520/article/details/7513098


    展开全文
  • JS线程与进程

    2020-04-15 11:02:03
    线程与进程 进程: 程序的一次执行, 它占有一片独有的内存空间 可以通过windows任务管理器查看进程 线程: 是进程内的一个独立执行单元 是程序执行的一个完整流程 是CPU的最小的调度单元 关系 一个进程至少有...

    线程与进程

    • 进程:
      • 程序的一次执行, 它占有一片独有的内存空间
      • 可以通过windows任务管理器查看进程
    • 线程:
      • 是进程内的一个独立执行单元
      • 是程序执行的一个完整流程
      • 是CPU的最小的调度单元
    • 关系
      • 一个进程至少有一个线程(主)
      • 一个进程中也可以同时运行多个线程, 我们会说程序是多线程运行的
      • 一个进程内的数据可以供其中的多个线程直接共享
      • 多个进程之间的数据是不能直接共享的
      • 程序是在某个进程中的某个线程执行的

    图解

    浏览器运行是单进程还是多进程?

    有的是单进程

    • firefox
    • 老版IE

    有的是多进程

    • chrome
    • 新版IE

    如何查看浏览器是否是多进程运行的呢?

    任务管理器==>进程

    浏览器运行是单线程还是多线程?

    都是多线程运行的

    浏览器内核模块组成

    什么是浏览器内核?

    支持浏览器运行的最核心的程序

    浏览器内核

    Chrome, Safari: webkit

    firefox: Gecko

    IE: Trident

    360,搜狗等国内浏览器: Trident + webkit

    • 主线程
      • js引擎模块 : 负责js程序的编译与运行
      • html,css文档解析模块 : 负责页面文本的解析
      • DOM/CSS模块 : 负责dom/css在内存中的相关处理
      • 布局和渲染模块 : 负责页面的布局和效果的绘制(内存中的对象)
    • 分线程
      • 定时器模块 : 负责定时器的管理
      • DOM事件模块 : 负责事件的管理
      • 网络请求模块 : 负责Ajax请求
    展开全文
  • js线程睡眠方法.txt

    2021-04-12 11:44:49
    js线程睡眠
  • auto js 线程测试

    千次阅读 2020-05-11 08:30:49
    // 测试线程 var obj = { total: 0 } var testThd = threads.start(function() { setTimeout(() => { obj.total = 10 console.log( '------------------', obj.total) }, 3000); }) // testThd.interrupt() ...
  • 主要介绍了浅谈Javascript线程及定时机制的相关资料,需要的朋友可以参考下
  • js 线程

    2019-03-18 11:06:23
    什么是线程? 提到线程,必不可少提到进程了,百度解释如下: 进程:操作系统分配的占有CPU资源的最小单位。拥有独立的地址空间。 ...js是单线程还是多线程javaScript是单线程执行机制。 ...
  • 注:以下内容基于IE中GIF的onload事件的基础上,故所有测试IE only 需要用到的几个图片 先看一个简单的事实: 代码如下:[removed] var img=new Image(); img.src=”attachment/1178365293_0.gif”;...
  • JS线程

    2017-03-21 15:51:20
    最近发现一个问题,setTimeout设置为0时,并不是瞬时0秒后触发里面的函数,从而牵引出关于JS线程的一些问题。从多方资料了解了很多,现在做个总结加深自己的理解,也为一些不知道的朋友做个讲解。 我们从js线程讲...
  • JavaScript线程

    2021-07-26 16:06:12
    我们知道JavaScript是单线程,就是js代码只能在一个线程上运行,,JS的主要用途是与用户互动和操作DOM,我们的JavaScript代码是从上到下依次执行的,但是遇到回调函数,setTimeout和Ajax异步的时候,他可以通过主线程条用...
  • js线程例子

    2013-09-05 10:39:57
    js线程的例子,下载下来跑一下就知道了,本地可以跑
  • js线程睡眠(用间接的方式实现)

    千次阅读 2019-12-20 16:21:57
    链接: 在Js中使程序睡眠的sleep方法
  • JavaScript 线程

    2014-02-14 15:13:44
    JavaScript引擎是单线程运行的,浏览器无论在什么时候都只且只有一个线程在运行。
  • 因为当JavaScript线程的正在出来其他JavaScript代码时,其实以已经阻塞了其他的代码,其中包括的setTimeout的定时器部分的实现。  millisec参数有什么用?  上诉测试发现,实际应用中。setTimeout的millisec...
  • javascript线程

    2017-03-08 10:00:46
    javaScript线程学习笔记 之前看javaScript的执行顺序,就想着了解一下js的线程问题。 知识要点 单线程:指的是一次只能执行一个任务,如果有多个任务,要排队执行 同步:后一个任务等待前一个任务结束在执行,执行...
  • 1.js中多线程-单线程, 同步-异步,阻塞-非阻塞, 回调函数的关系理解 //2018.12.12 1.多线程/单线程 简单理解为: 多线程:程序可以同一时间做几件事. 单线程:程序同一时间只能做一件事. 在...
  • 只是为了让 javascript 线程有机会触发可能在队列中等待的任何其他事件。 安装使用 bower install tri-angular-async 将脚本添加到您的主 html 文件(正常 - '/dist/triangular-async.js' 或缩小 - '/dist/...
  • JavaScript 实现线程

    千次阅读 2017-07-16 10:49:09
    JavaScript 实现线程锁 ECMAScript 2018 中增加了 SharedArrayBuffer 和 Atomics ,利用它们可以实现锁(Lock),即页面主线程和 Web Worker 线程间的锁。 SharedArrayBuffer SharedArrayBuffer(以下简称为SAB) 是...
  • 并发线程.js 为单线程JavaScript实现多线程并发的功能,语意上参考Java实现,提供getState / sleep / join等API,并提供线程间通信的功能,依赖ES6语法,基于Promise和Async函数实现,故需要Babel编译才能运行。...
  • 一直以为如果js写在head里就需要用window.onload=function(){},如果写在body结尾前面,则不用写,但是为什么下面的代码不写的话,最开始载入页面img的高度全部为0?(就是看不见图)执行js需要等img加载好吗,这...
  • 线程与进程机制 进程与线程 进程:程序运行的时候,独立站用一块内存空间 线程:进程内一个独立执行的的单元,是程序执行的一个完整流程,是cpu最小的单元调度 一个进程只要有一个运行的线程 一个进程可以有多个线程...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 197,072
精华内容 78,828
关键字:

JS线程