浅谈进程&&线程

浅谈进程&&线程

进程是资源分配的最小单位,线程是程序执行的最小单位

进程

概念:

​ 可并发执行的程序在某个数据集合上的一次计算活动,也是操作系统进行资源分配和调度的基本单位 。 可以看作是一个容器:容纳线程、内存(并不是物理内存而是虚拟内存)及数据的容器

组成

​ 进程一般由程序,数据集合和进程控制块三部分组成。

​ |程序用于描述进程要完成的功能,是控制进程执行的指令集;

​ |数据集合是程序在执行时所需要的数据和工作区;

​ |程序控制块包含进程的描述信息和控制信息,是进程存在的唯一标志

特征

​ |动态性:进程是程序的执行,同时进程有生命周期。

​ |并发性:多个进程可同存于内存中,能在一段时间内同时执行。

​ |独立性:资源分配和调度的基本单位。

​ |制约性:并发进程间存在制约关系,造成程序执行速度不可预测性,必须对进程的并发执行次序、相对执行速度加以协调。

​ |结构特征:进程由程序块 、数据块、进程控制块三部分组成。

线程

​ |进程之间的切换开销较大,无法满足越来越复杂的程序的要求了=>线程。

​ | 线程是一个进程中代码的不同执行路线 ,是程序执行流的最小单元。

​ |一个标准的线程由线程ID,当前指令指针PC,寄存器和堆栈组成。

​ |线程池:保存多个线程对象的容器,实现线程对象的重复利用

浅谈进程&&线程_第1张图片

进程和线程的相关知识

​ |应用程序必须运行在某个进程的某个线程上

​ |一个进程至少有一个运行的线程:主线程(进程启动后自动创建);也可以运行多个线程,可以说程序是多线程运行的

​ |进程内数据( 包括代码段,数据集,堆 ,打开文件和信号等)可以供其中的线程共享,但多个进程的数据不能共享

​ | 多线程程序只要有一个线程死掉,整个进程也死掉了,而一个进程死掉并不会对另外一个进程造成影响,因为进程有自己独立的地址空间

任务调度

​ 大部分操作系统的任务调度是采用时间片轮转的抢占式调度方式,也就是说一个任务执行一小段时间后强制暂停去执行下一个任务,每个任务轮流执行。任务执行的一小段时间叫做时间片,任务正在执行时的状态叫运行状态,任务执行一段时间后强制暂停去执行下一个任务,被暂停的任务就处于就绪状态,等待下一个属于它的时间片的到来。这样每个任务都能得到执行,由于CPU的执行效率非常高,时间片非常短,在各个任务之间快速地切换,给人的感觉就是多个任务在“同时进行” => 并发(多线程)

浅谈进程&&线程_第2张图片

JS:单线程

执行代码段的基本流程:

​ 1.初始化代码(设置,绑定,发送不代表执行其内部的回调代码)

​ 设置定时器

​ 绑定监听

​ 发送ajax请求

​ 2.之后某个时刻执行回调代码

setTimeout(function(){
    console.log('2222')
},2000)
setTimeout(function(){
    console.log('1111')
},1000)
setTimeout(function(){
    console.log('1111')
},0)  //以 0 为第二参数调用setTimeout并不表示在0毫秒后就立即调用回调函数,而是要等初始化代码执行完才开始计时
funcion fn(){
    console.log('fn()')
}
fn()

console.log('alert之前')
alert('alert执行了')   //暂停计时,点击确定后,才恢复计时 
console.log('alert之后')
//输出 fn() alert之前,就会alert弹窗,过了很久点击确定不会立刻输出1111 2222

事件循环

​ 栈里面是初始化代码的执行(两个特殊:定时器,事件监听) =>回调函数交给浏览器模块管理 => 特定的时间事件发生时,回调函数及数据放入callback queue队列

浅谈进程&&线程_第3张图片

你可能感兴趣的:(浅谈进程&&线程)