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

在这里插入图片描述

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

线程与进程的面试题总结

  • 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.rhkb.cn/news/394814.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

360安全大模型为什么是“非卖品”?

大模型虽然不是万能的,但是没有大模型又是万万不能的。以AI大模型为动力引擎,AI正在重塑各行各业,并快速“飞入寻常百姓家”。 AI安全 以“模”制“模” 2024年全国两会,“人工智能”首次被写入政府工作报告。报告中提出&#xff…

【2024算力大会分会 | SPIE出版】2024云计算、性能计算与深度学习国际学术会议(CCPCDL 2024)

【2024算力大会分会 | SPIE出版】 2024云计算、性能计算与深度学习国际学术会议(CCPCDL 2024) 2024 International conference on Cloud Computing, Performance Computing and Deep Learning CCPCDL往届均已完成EI检索,最快会后4个半月完成! 2024中…

嵌入式学习之文件IO和标准IO

IO概述 I/O是Input/Output的缩写,指的是输入/输出。在计算机科学和工程领域,I/O是指计算机系统与外部环境或内部组件之间进行数据交换的过程和机制。 用户I/O 用户通过输入设备与计算机交互。例如,通过键盘输入文字、通过鼠标点击界面等。…

图片怎么裁剪成想要的尺寸?图片裁剪的几个常用方法

裁剪图片到精准且令人满意的尺寸,是每一位图像编辑爱好者、社交媒体达人以及专业设计师在日常工作中不可或缺的技能。在这个视觉为王的时代,一张完美适配各种平台的图片,能够瞬间抓住观众的眼球,传递出最精准的信息与情感。从手机…

Vue3项目创建及相关配置

Vue是一种用于构建用户界面的JavaScript框架。它采用了一种称为MVVM(Model-View-ViewModel)的架构模式。 MVVM是一种将用户界面与业务逻辑和数据分离的设计模式。它包括三个部分: Model(模型):表示应用程序…

混合现实技术在虚拟培训、销售展示及教育科研等领域的应用方向

混合现实技术是虚拟现实技术的进一步发展方向,与传统的沉浸式虚拟现实技术相比混合现实技术能够为用户提供更多元化的观看场景。通过将虚拟物体与现实世界融合的全新形式为,包括虚拟训练、产品销售、教育科研等领域赋能。 混合现实技术中最为重要的是显示…

【JUC】并发编程与源码分析 1-7章

1 线程基础知识复习 1把锁:synchronized(后面细讲) 2个并: 并发(concurrent):是在同一实体上的多个事件,是在一台机器上“同时”处理多个任务,同一时刻,其…

程序员保碗之策

欢迎来到 破晓的历程的 博客 ⛺️不负时光,不负己✈️ 文章目录 1. **持续深化技术实力:从基础到前沿**夯实基础紧跟技术前沿跨领域融合 2. **提升实战能力:从项目到产品**参与实际项目自主实践产品思维 3. **建立个人品牌与影响力&#xff…

vs+qt一些问题

一直遇到的两个问题,今天解决了 1、 因为前后端分离,前端写完了,后端还在一直修改,但是每次都是单独打开的后端的sln,所以会出现这个,把前端的模块删掉就好了。 2、打开vs项目,很多报错&#…

sql注入靶场sqli-labs常见sql注入漏洞详解

目录 sqli-labs-less1 1.less1普通解法 1.在url里面填写不同的值,返回的内容也不同,证明,数值是进入数据库进行比对了的(可以被注入) 2.判断最终执行的sql语句的后面还有内容吗,并且能够判断是字符型的拼接…

MySQL:VIEW视图

概述 MySQL 视图(View)是一种虚拟存在的表,同真实表一样,视图也由列和行构成,但视图并不实际存在于数据库中。行和列的数据来自于定义视图的查询中所使用的表,并且是在使用视图时动态生成的。 数据库中只…

Unity物理模块 之 2D效应器

本文仅作笔记学习和分享,不用做任何商业用途 本文包括但不限于unity官方手册,unity唐老狮等教程知识,如有不足还请斧正​ 1.什么是效应器 2D 效应器 - Unity 手册 2D 效应器是与 2D 碰撞器一起使用的组件,相当于预先编写好的插…

⭕️【论文阅读】《Interactive Class-Agnostic Object Counting》

[2309.05277] Interactive Class-Agnostic Object Counting (arxiv.org) code: cvlab-stonybrook/ICACount: [ICCV23] Official Pytorch Implementation of Interactive Class-Agnostic Object Counting (github.com) 目录 Abstract Abstract 我们提出了一个新…

【合并 K 个升序链表】python刷题记录

R4-分治篇 目录 最小堆方法 分治法 ps: 如果只是数组就很好处理了 # Definition for singly-linked list. # class ListNode: # def __init__(self, val0, nextNone): # self.val val # self.next next class Solution:def mergeKLists(self, lists…

Spring AOP 源码剖析

一.AOP基础概念 切面(Aspect):切面是跨越多个类的关注点模块化,如事务管理。切面由切点和通知组成。连接点(Join Point):在程序执行过程中某个特定的点,如方法调用或异常抛出。在Sp…

kafka基础概念二

1.Kafka中主题和分区的概念 1.主题Topic 主题-topic在kafka中是一个逻辑的概念,kafka通过topic将消息进行分类。不同的topic会被订阅该topic的消费者消费 但是有一个问题,如果说这个topic中的消息非常非常多,多到需要几T来存,因…

区块链的搭建和运维4

区块链的搭建和运维4 (1) 搭建基于MySQL分布式存储的区块链 1.构建单群组网络节点 使用开发部署工具构建单群组网络节点,命令如下: bash build_chain.sh -l 127.0.0.1:4 -p 30300,20200,85452. 启动 MySQL 并设置账户密码 输入如下命令,…

关于Git使用不成功的问题解决方案记录

关于Git使用不成功的问题解决方案记录 前言代理连接不成功总结 前言 项目中建立了Git小仓库,但是在使用中出现了无法push新的代码,显示端口出现问题,发现网站和端口都没有问题,可以打开网站。但是还是连接失败,无法下…

MySQL笔记(十):MySQL管理

一、用户管理 #用户管理 -- 原因:当我们做项目开发时,可以根据不同的开发人员,赋给她相应的mysql操作权限。 -- 所以,mysql数据库管理人员(root),根据需要创建不同的用户,赋给相应的…

android中打包apk体积优化方案

1.在配置文件AndroidManifest中新增 android:extractNativeLibs"true" 2.在模块build文件下配置支持的cpu,一般配置64的就行了,多配一种so库体积大一倍,择优。 ndk { abiFilters arm64-v8a } 3.在模块builde文件下配置混淆除去无用的资源文件 注:三种…