什么是进程和线程? 为什么要引入线程? 进程和线程的区别?

2023-07-18 08:07:24 浏览数 (1)

什么是进程和线程? 为什么要引入线程? 进程和线程的区别?

什么是进程和线程?

什么是进程?

  • 进程是程序在某个数据集合上的一次运行活动(不仅包含正在运行的程序实体,并且包括这个运行的程序中占据的所有系统资源,比如说 CPU、内存、网络资源等),也是操作系统进行资源分配和保护的基本单位 通俗来说,进程就是程序的一次执行过程,程序是静态的,它作为系统中的一种资源是永远存在的。而进程是动态的,它是动态的产生,变化和消亡的,拥有其自己的生命周期 举个例子:同时挂三个 QQ 号,它们就对应三个 QQ 进程,退出一个就会杀死一个对应的进程。但是,就算你把这三个 QQ 全都退出了,QQ 这个程序死亡了吗?显然没有。

什么是线程?

  • 一个进程中可以有多个线程,它们共享这个进程的资源比如代码段、数据段、打开的文件等,但每个线程各自都有一套独立的寄存器和栈,这样可以确保线程的控制流是相对独立的。线程又称为迷你进程,它比进程更容易创建,也更容易撤销 举个例子,QQ 和 Chrome 浏览器是两个进程,Chrome 进程里面有很多线程,例如 HTTP 请求线程、事件响应线程、渲染线程等等,线程的并发执行使得在浏览器中点击一个新链接从而发起 HTTP 请求时,浏览器还可以响应用户的其它事件 操作系统会给每个进程分配一个虚拟地址空间(vitural address),每个进程包含的栈、堆、代码段这些都会从这个地址空间中被分配一个地址,这个地址就被称为虚拟地址,底层指令写入的地址也是虚拟地址。该进程下的所有线程共享这个虚拟地址空间。 有了虚拟地址空间后,CPU 就可以通过生成一个虚拟地址来访问主存,这个虚拟地址在被送到内存之前会先被转换成合适的物理地址,这个虚拟地址到物理地址的转换过程称为地址翻译/地址转换(address translation)。 地址翻译需要 CPU 硬件和操作系统的密切合作:CPU 上的内存管理单元(Memory Management Unit,MMU)就是专门用来进行虚拟地址到物理地址的转换的,不过 MMU 需要借助存放在内存中的页表,而这张表的内容正是由操作系统进行管理的,操作系统为每个进程建立了一张页表

为什么要引入线程?

在引入线程前,进程是操作系统进行资源分配和独立调度的基本单位。

由于创建或撤销进程时,系统都要为之分配或回收资源,如内存空间、I/O 设备等,需要较大的时空开销,限制了并发程度的进一步提高。为减少进程切换的开销,把进程作为资源分配单位和调度单位这两个属性分开处理,即进程还是作为资源分配的基本单位,但是不作为调度的基本单位(很少调度或切换),把调度执行与切换的责任交给线程,即线程成为独立调度的基本单位,它比进程更容易(更快)创建,也更容易撤销。

记住这句话!引入线程前,进程是资源分配和独立调度的基本单位。引入线程后,进程是资源分配的基本单位,线程是独立调度的基本单位。

进程和线程的区别?

线程与进程的比较如下:

  • 进程是资源(包括内存、打开的文件等)分配的基本单位,线程是 CPU 调度的基本单位;
  • 进程拥有一个完整的资源平台,而线程只独享必不可少的资源,如寄存器和栈;
  • 线程和进程一样具有就绪、阻塞、执行三种基本状态,同样具有状态之间的转换关系;
  • 线程能减少并发执行的时间和空间开销; 对于线程相比进程能减少开销,体现在:
    • 线程的创建时间比进程快,因为进程在创建的过程中,还需要资源管理信息,比如内存管理信息、文件管理信息,而线程在创建的过程中,不会涉及这些资源管理信息,而是共享它们;
    • 线程的终止时间比进程快,因为线程释放的资源相比进程少很多;
    • 同一个进程内的线程切换比进程切换快,因为同一个进程下的线程共享该进程的虚拟地址空间等资源,所以在切换时,这些共享资源就保持不动,只需要切换线程的私有数据、寄存器等不共享的数据。所以,线程的上下文切换相比进程,开销要小很多;
    • 由于同一进程的各线程间共享内存和文件资源,那么在线程之间数据传递的时候,就不需要经过内核了,这就使得线程之间的数据交互效率更高了;

    所以,不管是时间效率,还是空间效率线程比进程都要高

ios

0 人点赞