线程机制与事件机制①

本文介绍了进程与线程的概念,强调了多线程在提高CPU利用率方面的优势以及可能导致的开销和同步问题。JavaScript虽然单线程,但可通过Web Workers实现多线程。浏览器内核如WebKit、Gecko和Trident,其主要模块包括JS引擎、文档解析、DOM处理和渲染等,其中部分模块可能在主线程外的分线程运行。定时器的执行并不保证准时,可能因JavaScript单线程特性而延迟。
摘要由CSDN通过智能技术生成

进程与线程

进程:程序的一次执行, 它占有一片独有的内存空间。可以通过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是单线程的

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十八岁讨厌编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值