Loading

操作系统、浏览器与js之间的一些概念与联系

浏览器、操作系统与JavaScript语言的一些知识

进程与线程

参考文章:
阮一峰的网络日志--进程与线程的简单解释

进程的介绍

进程(process): 当有应用程序需要启动时,操作系统就会自动启动一个或多个进程来维持整个应用程序的运行,应用程序是运行在进程的线程中的

进程中的数据是不能够直接共享的

线程的介绍

线程(thread): 是进程内的最小单位,同时也是CPU最小的调度单元

一个进程中, 多个线程内的数据可以共享,但是为了数据的一致性和防止同时操作内存,就会涉及各种锁的概念,这里不过多介绍(其实因为我不会...)

进程与线程的关系:

  • 一个进程必然有一个线程, 这个线程成为主线程
  • 一个进程可以有多个线程

这里还要简单介绍一个概念: 线程池(thread pool),它作为一个容器用于保存多个线程,实现线程的反复利用

比较单线程与多线程

单线程优点: 代码编写相对简单,不轻易涉及到锁的概念

单线程缺点: 执行效率低

多线程优点: 有效地提升CPU的利用率

多线程缺点:

  • 创建多线程需要有额外的开销
  • 线程间的转换也需要有额外的开销
  • 维持线程同步容易遇到死锁与状态同步问题

JavaScript是单线程语言

JavaScript是单线程语言,但是在HTML5中的Web Workers可以多线程运行,但是Web Workers中的子线程不能操作DOM,同时子线程必须受控于主线程,所以本质上JavaScript仍然是一门单线程语言

浏览器内核

不同浏览器会使用不同的内核(引擎),内核的好快直接影响的就是浏览器的运行速度

内核是由多个模块组成的:

  • JS引擎模块: 负责js程序的编译与运行
  • html,css文档解析模块
  • DOM/CSS 模块: 负责DOM/CSS 在内存中的相关处理
  • 布局与渲染模块: 负责将解析好的文档树和效果绘制到浏览器页面中
  • 定时器模块: 负责定时器的管理
  • 事件相应模块: 负责各种事件的管理
  • 网络请求模块: 负责http、ajax等网络请求
posted @ 2021-02-28 23:30  虚伪渲染敷衍  阅读(381)  评论(0编辑  收藏  举报