首页 > 系统相关 >进程线程基础知识

进程线程基础知识

时间:2024-04-26 12:11:07浏览次数:28  
标签:基础知识 线程 切换 进程 共享 上下文 CPU

进程线程基础知识

pcb 包含的具体信息

进程描述信息(进程标识符,用户标识符)

进程管理状态(进程当前的状态,进程的优先级)

资源分配清单

cpu信息

pcb通过链表的方式来进行组织,把具有相同状态的进程链在一起组成队列。

进程的上下文切换

一个进程切换到另一个进程运行,称为进程的上下文切换

进程是由内核管理和调度的,所以进程的切换只能发生在内核态。

通常,会把交换的信息保存在进程的 PCB,当要运行另外一个进程的时候,我们需要从这个进程的 PCB 取出上下文,然后恢复到 CPU 中。

发生上下文切换的场景

时间片耗尽进程由运行态变成就绪态,CPU从就绪态选择其他的进程运行。

进程资源不足被挂起

被sleep函数主动挂起

为保证更高优先级的进程运行,当前进程被挂起

发生硬件中断,CPU上的进程会被挂起,转而执行内核中的终端服务程序

线程

为什么使用线程

为了解决多线程系统开销大,通信共享数据麻烦的问题

线程之间可以并发运行且共享相同的地址空间

线程的优点

一个进程可以同时运行多个线程

各个线程可以并发执行

各个线程之间可以共享地址空间和文件资源等

线程的缺点

一个线程崩溃回导致其他所有同进程的线程崩溃

线程与进程的比较

线程与进程的比较如下:

  • 进程是资源(包括内存、打开的文件等)分配的单位,线程是 CPU 调度的单位;
  • 进程拥有一个完整的资源平台,而线程只独享必不可少的资源,如寄存器和栈;
  • 线程同样具有就绪、阻塞、执行三种基本状态,同样具有状态之间的转换关系;
  • 线程能减少并发执行的时间和空间开销;

对于,线程相比进程能减少开销,体现在:

  • 线程的创建时间比进程快,因为进程在创建的过程中,还需要资源管理信息,比如内存管理信息、文件管理信息,而线程在创建的过程中,不会涉及这些资源管理信息,而是共享它们;
  • 线程的终止时间比进程快,因为线程释放的资源相比进程少很多;
  • 同一个进程内的线程切换比进程切换快,因为线程具有相同的地址空间(虚拟内存共享),这意味着同一个进程的线程都具有同一个页表,那么在切换的时候不需要切换页表。而对于进程之间的切换,切换的时候要把页表给切换掉,而页表的切换过程开销是比较大的;
  • 由于同一进程的各线程间共享内存和文件资源,那么在线程之间数据传递的时候,就不需要经过内核了,这就使得线程之间的数据交互效率更高了;

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

线程是调度的基本单位,而进程是资源拥有的基本单位

线程的上下文切换,若是同一个进程内只需要切换线程的私有数据,寄存器等不共享的数据,若不在同一个进程内,则和进程上下文切换一样。

标签:基础知识,线程,切换,进程,共享,上下文,CPU
From: https://www.cnblogs.com/cuberxh/p/18159766

相关文章

  • Java面试题:SimpleDateFormat是线程安全的吗?使用时应该注意什么?
    在日常开发中,我们经常会用到时间,我们有很多办法在Java代码中获取时间。但是不同的方法获取到的时间的格式都不尽相同,这时候就需要一种格式化工具,把时间显示成我们需要的格式。最常用的方法就是使用SimpleDateFormat类。这是一个看上去功能比较简单的类,但是,一旦使用不当也有可能导......
  • python多线程
    多线程的原理是在同一进程内创建多个线程来执行不同的任务,这些线程共享同一进程的资源,包括内存空间、文件句柄等。每个线程拥有独立的执行路径,可以并行执行任务,从而提高程序的效率。在代码中,通过调用threading.Thread类创建了多个线程对象。每个线程对象都有一个target参数......
  • dotnet 简单方法在一个进程内同时跑起 WPF 和 ASP.NET Core 框架
    从设计架构上,无论是WPF还是ASP.NETCore框架,都是在dotnet运行时上层的应用,两个框架处于平级的结构。理论上讲,两个平级的框架只要不存在特殊的情况,都是能够相容存在的。本文将和大家介绍一个非常简单的方法,在一个进程内同时跑起WPF和ASP.NETCore框架在一个进程内同时跑......
  • [笔记]html+css基础知识
    1.html标签单标签<br/>:换行用<meta/>:存字符编码,作者,版权,关键字,网页说明等信息,不显示在浏览器中a.比如:<metahttp-equiv="Content-Type"content="text/html;charset=gb2312"/><hr/>:插入一条水平线,两个标签表示插入两条<img/>:插入图片a.src是图像存储url或名......
  • 计算机基础知识
    计算机基础知识导航目录计算机基础知识导航一、数的转换进位计数制系统基本概念R进制-->十进制十进制-->R进制数据的储存单位二进制的算术运算二进制的逻辑运算二、数据的表示机器数三、计算机的基本组成运算器控制器基本概念指令、寻址方式指令寻址方式流水线流水线多级存储结......
  • docker.from_env() 获取docker守护进程时出现 TypeError: load_config() got an unexp
    某天使用python重启docker容器时,出现了一个令人费解的BUG,我的代码为1defrestart_docker(container_name):2#连接到docker守护进程3client=docker.from_env()4try:5#获取容器对象6container=client.containers.get(containe......
  • 【python】pyqt中使用多线程处理耗时任务
    在PyQt中使用多线程通常是为了避免界面冻结,特别是在执行耗时的任务时。PyQt本身是基于Qt的,而Qt不允许在除主线程之外的线程中直接操作GUI元素。因此,任何涉及GUI更新的操作都应该在主线程中执行。importsysimportthreadingfromPyQt5.QtWidgetsimportQApplic......
  • 深入理解多线程编程
    title:深入理解多线程编程date:2024/4/2517:32:02updated:2024/4/2517:32:02categories:后端开发tags:线程同步互斥锁死锁避免竞态条件线程池异步编程性能优化第一章:多线程基础1.1线程概念与原理线程:在操作系统中,一个程序可以被划分为多个执行流,每个......
  • Qt 中多线程对应的信号槽
    Qt中通过moveToThread方式来实现的多线程之间数据交互一般是通过信号槽来进行的,信号槽不仅可以用于同一个线程中,也可以用于多线程之间,当用于多线程之间时,其连接方式为Qt::QueuedConnection,即队列连接。多线程之间建立的信号槽主要为如下两个:主线程发送信号:来触发子线程的......
  • java 21 虚拟线程初体验
    基本特性,前提知识https://openjdk.org/jeps/444https://www.cnblogs.com/didispace/p/17735173.html不适应场景java21不适合CPU密集计算型任务,不过绝大多数的使用都不会是cpu密集计算场景......