【Liunx】线程与进程的经典面试题总结

ops/2024/9/23 14:31:18/

在这里插入图片描述

在这个浮躁的时代
只有自律的人才能脱颖而出
-- 《觉醒年代》

线程与进程的面试题总结

  • 1 简述什么是LWP
  • 2 简述LWP与pthread_create创建的线程之间的关系
  • 3 简述轻量级进程ID与进程ID之间的区别
  • 4 请简述什么是线程互斥,为什么需要互斥
  • 5 简述你了解的进程间通信方式
  • 6 线程与进程的关系
  • Thanks♪(・ω・)ノ谢谢阅读!!!
  • 下一篇文章见!!!

进程和线程我们都学习完了,下面我们就来看看相关的面试题来巩固一下:

1 简述什么是LWP

首先我们要明白什么是LWP,在Linux中:线程 = 线程库里的属性集 + LWP(轻量级进程),对应的线程库线程与LWP是一一对应的!

LWP处在内核层,是轻量级进程,在Linux下进程是资源分配的基本单位,是运行的执行流。而线程是cpu调度的基本单位,而线程使用进程pcb描述实现,并且同一个进程中的所有pcb共用同一个虚拟地址空间,因此相较于传统进程更加的轻量化

2 简述LWP与pthread_create创建的线程之间的关系

首先在Linux中:线程 = 线程库里的属性集 + LWP(轻量级进程),应的线程库线程与LWP是一一对应的!线程处在用户层,LWP处在内核层。

  1. pthread_create创建的线程本质上是在底层创建一个LWP然后在上层通过线程进行调用!可以说LWP是线程实现的基础
  2. 1 :1映射:Linux中的LWP和pthread_create创建的线程是一比一映射的!
  3. 线程调度:线程调度的底层其实就是内核中调度LWP!
  4. 资源共享:pthread线程与它们所属的进程共享资源,如地址空间、打开的文件描述符等。这与LWP的特性是一致的,因为pthread线程实际上就是LWP。

总结来说,在Linux系统中,通过pthread_create创建的线程通常与LWP是一一对应的。pthread线程是用户层面的抽象,而LWP是内核层面的实现。pthread库提供了线程管理的接口,而LWP则是这些线程在内核中的实际执行实体。

3 简述轻量级进程ID与进程ID之间的区别

因为Linux下的轻量级进程是一个pcb,每个轻量级进程都有一个自己的轻量级进程ID(pcb中的pid),而同一个程序中的轻量级进程组成线程组,拥有一个共同的线程组ID!

  1. 首先需要明确的是,进程ID是操作系统中唯一的存在!轻量级进程ID是在进程中才有意义!:
    • 进程ID:每个进程在操作系统中有唯一的进程ID,用于标识一个独立的进程。进程ID是全局唯一的,即在系统范围内没有两个活跃进程具有相同的进程ID。
    • 轻量级进程ID(线程ID):线程ID用于标识进程中的一个线程。在一个进程中,每个线程都有一个唯一的线程ID,但这个ID只在它所属的进程内部有效。
  2. 作用域
    • 进程ID:具有系统级的作用域,系统中的所有进程都可以通过进程ID来识别和操作特定的进程。
    • 线程ID:具有进程级的作用域,只在创建它的进程内部有效,用于在该进程内部识别和操作特定的线程。
  3. 资源共享
    • 进程ID:每个进程拥有独立的资源,如地址空间、文件描述符等。
    • 线程ID:线程共享所属进程的资源,如地址空间、文件描述符等。

在Linux中,轻量级进程实际上就是内核线程,而通过pthread_create创建的线程通常与这些轻量级进程有一对一的映射关系。因此,线程ID在内核层面也是通过轻量级进程ID来实现的。

4 请简述什么是线程互斥,为什么需要互斥

线程互斥指的是在多个线程间对临界资源进行争抢访问时有可能会造成数据二义,因此通过保证同一时间只有一个线程能够访问临界资源的方式实现线程对临界资源的访问安全性。

线程互斥是一种特殊场景,举个例子:
在银行中假如只有一个ATM机,银行里有很多人,如果多个人一起使用ATM机,就肯定会导致大问题!银行是进程 , 银行中的人就是线程,ATM机是临界资源!

线程中访问临界资源的场景就是线程互斥!此时访问临界资源,临界资源往往不是原子的,在执行一条语句时,实际上是在执行多条汇编指令,在执行的过程中,如果发生线程的切换,临界资源就被多个线程访问,也就是ATM机被两个人同时使用,这可能会出问题的!所以需要进行互斥,保证临界资源只能一个线程访问!

5 简述你了解的进程间通信方式

进程间通信的本质是让两个进程看到同一块资源,这样才能做到进程间的通信!

  1. 管道:管道分为匿名管道和命名管道(FIFO),管道的本质是文件缓冲区,让两个文件看到同一个文件。父子进程会进行写时拷贝,可以看到同一个文件。非父子进程采取命名管道,通过文件名来看到同一个文件。注意管道只能单向通信,只有一个写端,一个读端
  2. 共享内存:共享内存是在内存中开辟一片内存空间,可以被多个进程来获取(类似动态库!)。内存允许多个进程访问同一块内存区域,从而实现快速的数据交换。但需要注意同步问题,以避免竞态条件和数据一致性问题。一定要有写才有读。可读可写!使用共享内存时,必须注意同步问题,以避免竞态条件和数据一致性问题。通常需要配合信号量或互斥锁等同步机制来确保数据的一致性。

6 线程与进程的关系

  1. 进程:进程是程序在操作系统中的一个执行实例。它包含了程序代码、数据、和资源(如文件句柄、内存)等。它是操作系统分配资源的基本单位,进程各自都有自己的内存空间,它由操作系统调度。也由于进程有独立的地址空间,所以进程间切换(上下文切换)开销较大。进程间通信(IPC)复杂,需要借助操作系统提供的机制,如管道、消息队列、共享内存等。
  2. 线程:线程是进程中的一个执行单元,属于轻量级进程。一个进程可以包含多个线程,它们共享进程的地址空间和资源,但是它们各自都有自己的程序计数器和栈空间,线程是属于进程的。因为共享进程中的资源,所以线程的创建和销毁比进程更快,线程间切换(上下文切换)开销小。它是CPU执行的基本单位,它由CPU 调度。线程间通信简单,因为它们共享地址空间,可以直接使用共享变量。

Thanks♪(・ω・)ノ谢谢阅读!!!

下一篇文章见!!!


http://www.ppmy.cn/ops/92314.html

相关文章

在 Ubuntu Server 上配置静态 IP 地址

在 Ubuntu Server 上配置静态 IP 地址 测试时使用的Ubuntu server版本是22.04 一、Ubuntu 17.10之前版本 使用 ifupdown 配置文件来设置静态 IP。配置文件通常位于 /etc/network/interfaces。 1.1 编辑 /etc/network/interfaces 文件: sudo vim /etc/network/in…

git 提交到远程仓库了怎么撤回

有多种方式撤回,以下这种方式算是最安全的一种方式,原理是通过创建一个新的提交来“反做”之前的提交。这不会改变项目的历史记录 1. **查找提交**: - 使用 git log -n 10 查看历史提交的hash值 2. **找到要撤回的提交**: - 在输出中找到你想要撤…

二、Matlab图像处理基础

文章目录 一、Matlab图像处理工具箱二、图像文件的读取2.1 文件信息的读取2.2 图像文件的读取2.3 图像文件的保存2.4 图像文件的显示2.5 像素信息的显示 本章知识点总结 一、Matlab图像处理工具箱 在帮助文档可以搜索到图像处理工具箱的介绍 二、图像文件的读取 2.1 文件信息…

基于vue框架的《大学计算机》课程思政资源共享平台ac9s7(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能:学生,教师,教研小组,章节分类,课程内容,资源类型,资源信息 开题报告内容 基于Vue框架的《大学计算机》课程思政资源共享平台 开题报告 一、引言 随着教育信息化的深入发展,高等教育领域对课程思政的重视程度日益提升。《大…

java实现解析pdf格式发票

为了减少用户工作量及误操作的可能性&#xff0c;需要实现用户上传PDF格式的发票&#xff0c;系统通过解析PDF文件获取发票内容&#xff0c;并直接将其写入表单。以下文章记录了功能实现的代码。 发票样式 发票内容解析 引用Maven 使用pdfbox <dependency><groupI…

Conda Shell初始化指南:激活你的开发环境

Conda Shell初始化指南&#xff1a;激活你的开发环境 Conda不仅是一个强大的包管理器&#xff0c;它还提供了环境管理功能&#xff0c;允许用户在不同项目之间轻松切换。为了充分利用Conda的环境管理能力&#xff0c;你需要将你的shell初始化为Conda。conda init命令是实现这一…

Linux--shell脚本语言—/—终章

一、shell函数 1、shell函数定义格式 参数说明&#xff1a; 1、可以带function fun() 定义&#xff0c;也可以直接fun() 定义,不带任何参数。 2、参数返回&#xff0c;可以显示加&#xff1a;return 返回&#xff0c;如果不加&#xff0c;将以最后一条命令运行结果&#xff…

【Vue3】组件通信之mitt

【Vue3】组件通信之mitt 背景简介开发环境开发步骤及源码总结 背景 随着年龄的增长&#xff0c;很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来&#xff0c;技术出身的人总是很难放下一些执念&#xff0c;遂将这些知识整理成文&#xff0c;以纪念曾经努力学习奋斗的日…