线程机制与事件机制①

导读:本篇文章讲解 线程机制与事件机制①,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

也许你感觉自己的努力总是徒劳无功,但不必怀疑,你每天都离顶点更进一步。今天的你离顶点还遥遥无期。但你通过今天的努力,积蓄了明天勇攀高峰的力量。加油!

进程与线程

进程:程序的一次执行, 它占有一片独有的内存空间。可以通过windows任务管理器查看进程。

线程:是进程内的一个独立执行单元,是程序执行的一个完整流程. 是CPU的最小的调度单元

例如:
在这里插入图片描述
注意:

  • 应用程序必须运行在某个进程的某个线程上
  • 一个进程中至少有一个运行的线程: 主线程, 进程启动后自动创建
  • 一个进程中也可以同时运行多个线程, 我们会说程序是多线程运行的
  • 一个进程内的数据可以供其中的多个线程直接共享
  • 多个进程之间的数据是不能直接共享的
  • 线程池(thread pool): 保存多个线程对象的容器, 实现线程对象的反复利用

相关问题:

相关问题

何为多进程与多线程

多进程运行: 一应用程序可以同时启动多个实例运行

多线程: 在一个进程内, 同时有多个线程运行

比较单线程与多线程?

多线程

优点

能有效提升CPU的利用率

缺点

创建多线程开销

线程间切换开销

死锁与状态同步问题

单线程

优点

顺序编程简单易懂

缺点

效率低

JS是单线程还是多线程?

js是单线程运行的

但使用H5中的 Web Workers可以多线程运行

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

都是多线程运行的

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

有的是单进程

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是单线程的。

定时器引发的思考

定时器并不能保证真正定时执行!,一般会延迟一丁点(可以接受), 也有可能延迟很长时间。

例如以下代码的定时器是完全不准确的:

<script type="text/javascript">

  document.getElementById('btn').onclick = function () {
    var start = Date.now()
    console.log('启动定时器前...')
    setTimeout(function () {
      console.log('定时器执行了', Date.now()-start)
    }, 200)
    console.log('启动定时器后...')

    // 做一个长时间的工作
    for (var i = 0; i < 1000000000; i++) {

    }
  }
</script>

定时器回调函数是在分线程执行的吗?
在主线程执行的, js是单线程的

定时器是如何实现的?
事件循环模型

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之家整理,本文链接:https://www.bmabk.com/index.php/post/122207.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之家——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!