JS线程与进程

  • 线程与进程

    • 进程:
      • 程序的一次执行, 它占有一片独有的内存空间
      • 可以通过windows任务管理器查看进程
    • 线程:
      • 是进程内的一个独立执行单元
      • 是程序执行的一个完整流程
      • 是CPU的最小的调度单元
    • 关系
      • 一个进程至少有一个线程(主)
      • 程序是在某个进程中的某个线程执行的
  • 阻塞与非阻塞

    • I/O (了解)
      • 阻塞I/O: 调用时, 应用程序需要等待IO完成才返回结果
      • 非阻塞I/O: 调用之后立即返回, 需要通过轮询得到IO的结果数据
    • 非I/O
      • 阻塞: 调用函数导致所在的线程暂停, 不能继续执行 —>alert()
      • 非阻塞 : 其它代码(绝大部分)
  • 同步与异步

    • 它们描述的是调用执行功能程序的方式
    • 同步: 调用一个函数,在没有得到结果之前,该调用就不返回 (绝大部分)
    • 异步: 调用一个函数会立即返回, 但此时还没有得到结果, (回调函数)
      结果是通过回调函数的形式交给调用者
  • 并发与并行(了解)

    • 并行: 多个事件在同一时刻发生
    • 并发: 指多个事件在同一时间间隔内发生
  • js线程

    • js是单线程执行的(回调函数也是在主线程)
    • H5提出了实现多线程的方案: Web Workers —>Worker
    • 只能是主线程更新界面
    • 在worker线程中, 全局对象不再是window
  • 定时器问题:

    • 定时器并不真正完全定时
    • 如果在主线程执行了一个长时间的操作, 可能导致延时才处理
    • 区别setTimeout与setInterval
  • 事件处理机制(图)

    • 所有代码分类
      • 初始化执行代码: 包含绑定dom事件监听, 设置定时器, 发送ajax请求的代码
      • 回调执行代码: 处理回调逻辑
    • js引擎执行代码的基本流程: 初始化代码===>回调代码
    • 模型的2个重要组成部分:
      • 事件管理模块
      • 回调队列
    • 模型的运转流程
      • 执行初始化代码, 将事件回调函数交给对应模块管理
      • 当事件发生时, 管理模块会将回调函数及其数据添加到回调列队中
      • 只有当初始化代码执行完后(可能要一定时间), 才会遍历读取回调队列中的回调函数执行
  • H5 Web Workers

    • 可以让js在分线程执行
    • Worker
      var worker = new Worker('worker.js');
      worker.onMessage = function(event){event.data} : 用来接收另一个线程发送过来的数据的回调
      worker.postMessage(data1) : 向另一个线程发送数据
      
    • 不足:
      • worker内代码不能操作DOM更新UI
      • 不能跨域加载JS
      • 不是每个浏览器都支持这个新特性
  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值