线程与进程
什么是进程?
首先, CPU懂吧?是计算机的核心,承当所有的计算任务
官方:进程是CPU资源分配的最小单位
按我的理解:
进程就是进行中的程序,可以独立运行并且拥有自己的资源空间的任务程序
意思就是:
- 运行中的程序
- 程序所用到的内存和系统资源
浏览器中的每个tab页都是一个进程
什么是线程?
官方:线程是CPU调度的最小单位
线程是建立 进程的基础上的一次程序运行单位
通俗点就是:线程是程序中的一个执行流,一个进程中可以拥有多个执行流,也就是多个线程
线程分为两种:
- 单线程:一个进程中只有一个执行流,就只有一个线程,叫做单线程
- 多线程:顾名思义一个进程多个执行流,
进程与线程的区别
进程是操作系统分配资源的最小单位,线程是程序执行的最小单位
一个进程由一个或多个线程组成,线程可以理解为是一个进程中代码的不同执行路线
进程之间相互独立,但同一进程下的各个线程间共享程序的内存空间(包括代码段、数据集、堆等)及一些进程级的资源(如打开文件和信号)
多进程和多线程
**多进程:**多进程指的是在同一个时间里,同一个计算机系统中如果允许两个或两个以上的进程处于运行状态。多进程带来的好处是明显的,比如大家可以在网易云听歌的同时打开编辑器敲代码,编辑器和网易云的进程之间不会相互干扰
**多线程:**多线程是指程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务,也就是说允许单个程序创建多个并行执行的线程来完成各自的任务
JS为什么是单线程
JS的单线程,与它的用途有关。作为浏览器脚本语言,JavaScript的主要用途是与用户互动,以及操作DOM。这决定了它只能是单线程,否则会带来很复杂的同步问题。比如,假定JavaScript同时有两个线程,一个线程在某个DOM节点上添加内容,另一个线程删除了这个节点,这时浏览器应该以哪个线程为准?
还有人说js还有Worker线程,对的,为了利用多核CPU的计算能力,HTML5提出Web Worker标准,允许JavaScript脚本创建多个线程,但是子线程是完 全受主线程控制的,而且不得操作DOM
所以,这个标准并没有改变JavaScript是单线程的本质