线程机制与事件机制①

进程与线程

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

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

猜你喜欢

转载自blog.csdn.net/zyb18507175502/article/details/124124252