美文网首页
JavaScript 线程与进程

JavaScript 线程与进程

作者: BlueSkyBlue | 来源:发表于2020-04-28 19:04 被阅读0次

进程

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

线程

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

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

单线程和多线程的区别:
多线程:
优点:有效的提高CPU的利用率。
缺点:
创建多线程会增大开销。
线程间的切换开销。
死锁与状态同步的问题。
单线程:
优点:顺序编程简单易懂。
缺点:效率低。

JS程序是单线程运行的。但使用HTML5中的Web Workers可以多线程运行。浏览器是多线程运行的。浏览器有单进程,也有多进程的。

浏览器内核

支撑浏览器运行最核心的程序。不同的浏览器内核可能不一样。内核是由很多模块组成的。

浏览器模块构成:
主线程:

  1. JS引擎模块:负责JS程序的编译与运行。
  2. HTML, CSS文档解析模块:负责页面文本的解析。
  3. DOM/CSS模块:负责dom/css在内存中的相关处理。
  4. 布局和渲染模块:负责页面的布局和效果的绘制(内存中的对象)。

分线程:

  1. 定时器模块:负责定时器的管理。
  2. 事件响应模块:负责事件的管理。
  3. 网络请求模块:负责ajax请求。

定时器

定时器真的是定时执行的吗?
定时器并不能保证真正的定时执行。一般会延迟一点,但是可以接受。也可能是延迟很长时间,不能接受。

原因是JS是单线程的。定时器的回调函数是在主线程执行的。所以回调函数的开始执行时间受主线程的影响。

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

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

JS单线程

如何证明JS执行是单线程的?
setTimeOut的回调函数是在主线程中执行的。定时器的回调函数必须在运行栈中的代码全部执行完之后才可以执行。

代码分类:

  1. 初始化代码
  2. 回调代码

JS引擎执行代码的基本流程:
先执行初始化代码,包含一些特别的代码(设置定时器,绑定监听,发送ajax请求)。
后面某个时刻执行回调代码。

为什么JS要设计成单线程模式?
如果JS使用多线程,此时程序中有两个线程P1和P2。P1负责修改字段,P2负责删除字段。它们同时作用于字段P。假设刚开始是P1抢到了资源但是在修改操作执行之前,P2抢到了资源,将P的内容删除了,此时P1的修改操作会失败。而且多线程间的切换也会浪费系统的资源。

相关文章

  • JavaScript 线程与进程

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

  • 初识JavaScript工作线程—2017年7月28日

    JavaScript工作线程 进程与线程 JavaScript一次只能做一件事,但是有了HTML5和Web工作线程...

  • EventLoop事件循环

    一、先了解javascript为什么是单线程 |--javascript语言的特点:单线程。 |--线程和进程 ...

  • iOS_进程与线程(多进程与多线程)

    iOS_进程与线程(多进程与多线程)

  • Java 线程相关

    目录1.并行与并发2.进程与线程---- 2.1 进程---- 2.2 线程---- 2.3 进程与线程的区别--...

  • 并发编程之进程与线程

    并发编程之进程与线程 2.1 线程与进程 2.1.1 进程 2.1.2 线程 2.1.3 二者对比 2.2 并行与...

  • 进程与线程、线程池

    进程与线程的相关总结进程与线程的简单解释进程: 基本的资源分配资源线程: 最小调度单元 线程安全 线程安全是多线程...

  • 不同语言的协程示例

    进程和线程、协程的区别async 函数的含义和用法上面两篇文章介绍进程,线程, 和协程,以及javascript中...

  • 详解iOS面试:进程与线程

    进程与线程 进程 = 资源管理 + 线程, 进程是资源分配单位,线程是 CPU 调度单位 以前没有线程的时候,进程...

  • Python多线程与多进程

    内容简述: 线程与进程的相关概念1、程序,进程,线程,多进程,多线程2、线程的生命周期3、并行与并发,同步与异步4...

网友评论

      本文标题:JavaScript 线程与进程

      本文链接:https://www.haomeiwen.com/subject/szjbwhtx.html