进程与线程

2023-05-16

对于操作系统来说,一个任务就是一个进程(Process),比如打开一个浏览器就是启动一个浏览器进程,打开一个记事本就启动了一个记事本进程,打开两个记事本就启动了两个记事本进程,打开一个 Word 就启动了一个 Word 进程。
有些进程还不止同时干一件事,比如Word,它可以同时进行打字、拼写检查、打印等事情。在一个进程内部,要同时干多件事,就需要同时运行多个“子任务”,我们把进程内的这些“子任务”称为线程(Thread)

类比:
进程 = 工厂
线程 = 工厂里各个流水线

注意:一个进程可能对应多个端口号,一个端口对应一个进程。

进程

进程可以认为是程序执行时的一个实例。进程是系统进行资源分配的独立实体,且每个进程拥有独立的地址空间。(即 资源的分配和调度的一个独立单元
进程控制块(Process Control Block, PCB):保存运行期间进程的数据,PCB进程存在的唯一标志

  • 进程 = 程序 + 数据 + PCB

  • 一个进程无法直接访问另一个进程的变量和数据结构,如果希望让一个进程访问另一个进程的资源,需要使用进程间通信,比如:管道、文件、套接字等。


进程的五种基本状态及其转换:

Image

  • 创建状态:进程正在被创建,尚未转到就绪状态,创建进程需要申请一个空白的 PCB,并向 PCB 写一些控制和管理进程的信息,然后由系统分配资源,将进程转入就绪状态。

  • 就绪状态:进程已处于准备执行的状态,获得了除处理机以外的一切所需资源。

  • 执行状态:进程在处理机上运行。在单处理机环境下,每一时刻最多只有一个进程运行。

  • 阻塞状态:进程正在等待某一事件(服务请求)而暂停运行,如 等待某资源变为可用(不包括处理机)或等待输入输出 I/O 完成,即使处理机空闲,该进程也不能运行。

  • 结束状态:进程正从系统中消失,这可能是进程正常结束或其他原因中断退出运行,当进程需要结束运行时,系统首先必须置该进程为结束状态,然后再进一步处理资源释放和回收。

注意:后备队列外存中,而就绪队列内存中。

进程同步与互斥

PV 操作是一种实现进程互斥与同步的有效方法。PV操作与信号量的处理相关,P 表示通过(荷兰语 passeren)的意思,V 表示释放(荷兰语 vrijgeven)的意思。

具体来源可以查看PV操作的来源

互斥与同步:

  • 互斥:是指某一资源同时只允许一个访问者对其进行访问,具有唯一性排它性。但互斥无法限制访问者对资源的访问顺序,即 访问是无序的

  • 同步:是指在互斥的基础上(大多数情况),通过其它机制实现访问者对资源的有序访问。在大多数情况下,同步已经实现了互斥,特别是所有写入资源的情况必定是互斥的。少数情况是指可以允许多个访问者同时访问资源。


在操作系统中,信号量S是一整数。
S≥0 时,S 表示可供并发进程使用的资源实体数
S<0 时,S 表示正在等待使用资源实体的进程数
建立一个信号量必须说明此信号量所代表的意义并且赋初值。
除赋初值外,信号量仅能通过PV操作来访问。

  • 信号量 S(semaphore) 代表“资源数”

  • P 操作的主要动作是:通过(荷兰语 passeren)(即 让进程使用资源

    • S 减 1;

      类比:“占用了一个资源”

    • 若相减结果仍大于或等于 0,则进程继续执行;

      类比:“若占用一个资源后,还有多余的资源或者刚好用完资源,那么就代表该进程有资源可以利用,进程也就可以继续执行

    • 若相减结果小于 0,则该进程被阻塞(挂起),之后放入等待该信号量的等待队列中,然后转入进程调度。

      类比:“若占用一个资源后,还欠别人资源,那么就代表该进程根本就没有资源可以用了,所以先欠着,挂个号,等待

  • V 操作的主要动作是:释放(荷兰语 vrijgeven)(即 让进程释放资源

    • S 加 1;

      类比:“资源占用完了,物归原主,释放资源”

    • 若相加结果大于 0,则进程继续执行;

      类比:“若释放资源后,资源数大于 0,就代表库存里的资源充裕,奉还资源后,还有资源可以给你利用,那就继续占用资源,继续执行

    • 若相加结果小于或等于 0,则从该信号的等待队列中释放一个等待进程(唤醒等待→就绪),然后再返回原进程继续执行 或转入进程调度。

      类比:“若一个进程结束,释放资源后,资源数还是欠别人的或者为 0,就代表库存里的资源很紧张资源刚一释放就被其他进程一抢而空,所以自己就不能用了,得先来后到把资源给下一个进程用,让下一个进程就绪
      如果执行不需要此资源,那么等自己执行完后(有的执行并不一定需要此资源)把处理机让给下一个进程用;
      如果执行需要此资源,那么转入进程调度,重新排队,等等再执行,把处理机让给下一个进程用,让下一个进程执行。”

注意:PV 操作对于每一个进程来说,都只能进行一次,而且必须成对使用

多核处理器的并行计算

1、并行计算机体系结构
    了解并行计算机体系结构是开展并行计算研究的基础。为了设计一个高效率的并行算法,实现一个高效率的并行程序,需要对并行计算机体系结构有一定的了解。此部分内容主要包括:多级存储体系结构和并行计算机访存模型。
    得益于主频和超标量指令级流水线技术的发展,现代微处理器的发展仍然遵循摩尔定律,峰值运算速度每18个月翻一番。相比较而言,内存的访问速度要比处理器执行速度慢很多,数据存取速度(即数据填充指令处理流水线的速度)难以满足微处理器的峰值计算速度,这就是所谓的内存墙(memory wall)性能瓶颈问题。多级存储体系结构是一种解决方案。
    并行计算机的访存模型主要有:UMA模型、NUMA模型、COMA模型和NORMA模型。
2、并行计算模型
    此部分内容主要从并行程序/并行算法的角度来介绍并行计算模型。依次讨论SIMD同步并行计算模型,包括共享存储的SIMD模型(即PRAM模型)和分布存储的SIMD模型(即SIMD互联网络模型);MIMD异步并行计算模型(更常用的并行计算模型),包括异步PRAM模型(从共享存储的MIMD-SM多处理机抽象而来)以及BSP、LogP和C3模型(从分布存储的MIMD-DM多计算机中抽象而来)等。.0
3、进程
    现代操作系统中的一个重要概念是进程(process)。正是由于多个进程之间的相互通信,才决定了各类消息传递并行程序设计平台的出现。此部分内容主要介绍进程和进程间通信的基本概念。
4、线程
    为了更好的理解并行编程环境,这里简要介绍另一个重要概念:线程(threads),线程又被称作轻量级进程。
5、并行编程环境
    在当前并行计算机上,比较流行的并行编程环境主要有3类:消息传递、共享存储和数据并行,此部分内容对这3类并行编程环境的主要特征进行比较总结。
6、编程语言与编译器
    此部分内容将探究在科学计算领域对并行编程支持已取得相当成功的三项技术:自动并行化、数据并行语言(HPF)、共享存储并行编程接口(OpenMP)。
7、并行计算性能评测
    给定并行算法,采用并行程序设计平台,通过并行实现获得实际可运行的并行程序后,一个重要的工作就是,在并行计算机上运行该程序,评价该程序的实际性能,揭示性能瓶颈,指导程序的性能优化。性能评价和优化是设计高效率并行程序必不可少的重要工作。此部分内容介绍当前流行的并行程序性能评价方法,并讨论有效的性能优化方法。
8、常用并行数值算法
    在科学与工程计算的许多问题中经常需要进行矩阵计算。矩阵乘、求解线性方程组和矩阵特征值问题是矩阵计算最基本的内核。本节主要介绍基于MPP并行计算机、机群和消息传递并行环境(MPI等)上的矩阵乘以及求解线性方程组的并行数值算法。
9、并行编译器
    一个并行编译器大致可由三部分组成:流分析,程序优化和代码生成。其中,流分析是确定源代码中数据和控制的相关性;优化常常是将代码变换成与之等效但具有“更好”的形式,以利于尽量挖掘硬件潜力,最终达到全局优化的目的;代码生产通常涉及到从一种描述转换成另一种中间形式的描述,不同类型的计算机其并行代码的生成也各不相同。

多线程编程基础

参考链接:https://blog.csdn.net/itcastcpp/article/details/5470105

1、线程(thread)

    是操作系统中比进程更小的可执行单元,现代操作系统大都支持线程机制以便节约资源并获得更好性能。本章介绍了进程、线程的基本概念,以及多线程的互斥同步的基本概念。
2、多线程的概念
    多线程的每个线程执行一个单独的逻辑路径,可以将冗长的或非常耗时的任务放在后台处理。即使在只有单处理器的计算机上,使用多线程也可以非常显著地提高应用程序的响应能力和可用性。
    多线程机制的优点:创建一个线程比创建一个进程的代价要小、线程的切换比进程间的切换代价小、充分利用多处理器、.数据共享和快速响应特性。
3、用户级线程和内核级线程
    根据在用户空间还是在核心实现多线程机制,线程又被分为用户级线程(user level thread)和内核级线程(kernel level thread)。用户线程的所有管理工作都由在用户级实现的线程库来支持。内核级线程的所有管理操作都是由操作系统内核完成的。
4、多线程的映射模型
    对于实现了用户级线程和内核级线程的操作系统,用户级线程和内核级线程之间的可以有不同的映射方式:多对一模型、一对一模型和多对多模型。线程池是一组被创建的线程的集合,当一个进程需要线程时,如果线程池中还有可用的线程,就从中取出一个投入使用,所以进程可以更快地使用一个线程而不必等待线程的创建。
5、线程的生命周期
    本部分内容包括:线程的标识,通常用一个整数来标识一个线程;线程的创建;线程的终止和线程的状态。线程有四个基本的状态:就绪(ready)、运行(running)、阻塞(blocked)和终止(terminated)。
6、多线程环境下的进程控制语义
    单线程环境下的进程控制接口在多线程环境下语义可能会发生变化,包括进程创建、进程终止、程序执行、信号处理等。
7、线程的同步
    由于线程共享同一进程的内存空间,多个线程可能需要同时访问同一个数据。如果没有正确的保护措施,对共享数据的访问会造成数据的不一致和错误。为避免这种不确定的错误结果的出现,在两个线程访问共享数据的时候需要同步机制。
    常用的同步机制包括临界区(critical section),信号量(simphore),互斥量(mutex),管程(monitor)。比较常用的同步方法是信号量和互斥量方法。

  线程之间通信的两个基本问题是互斥和同步。
    线程同步是指线程之间所具有的一种制约关系,一个线程的执行依赖另一个线程的消息,当它没有得到另一个线程的消息时应该等待,直到消息到达时才被唤醒。
    线程互斥是指对于共享资源,在各线程访问时的排它性。当有多个线程都要使用某一共享资源时,同一时刻只允许一个线程去使用,其它要使用该共享资源的线程必须等待,直到占用资源者释放该共享资源。
   在WIN32中,同步机制主要有以下几种:
    (1)全局变量;
    (2)事件(Event);
    (3)临界区(Critical section);
    (4)互斥量(Mutex);
    (5)信号量(Semaphore)。
原文链接:https://blog.csdn.net/itcastcpp/article/details/5470105

代码化如下:
P 操作:

↓CloseCode↓


  
P(S) {
S--;
if(S < 0) {
保留调用进程CPU现场;
将该进程的PCB插入S的等待队列;
置该进程为“等待”状态;
转入进程调度;
}
}

V 操作:

↓CloseCode↓


  
V(S) {
S++;
if(S <= 0) {
移出S等待队列首元素;
将该进程的PCB插入就绪队列;
置该进程为“就绪”状态;
}
}

进程通信

根据交换信息量的多少和效率的高低,进程通信分为如下低级通信和高级通信。

  • 低级通信:只能传递状态和整数值(控制信息)。(如 同步互斥工具:PV 操作)

    由于进程的互斥和同步,需要在进程间交换一定的信息,故不少学者将它们也归为进程通信。

    • 特点:传送信息量小,效率低,每次通信传递的信息量固定,若传递较多信息则需要进行多次通信。

    • 编程复杂:用户直接实现通信的细节,容易出错。

  • 高级通信:提高信号通信的效率,传递大量数据,减轻程序编制的复杂度。
    提供三种方式:

    • 共享内存模式

    • 消息传递模式

    • 共享文件模式

共享内存模式

在通信进程之间存在一块可直接访问的共享空间,通过对这片共享空间进行写/读操作,实现进程之间的信息交换。

Image


在对共享空间进行写/读操作时,需要同步互斥工具(如 P操作、V操作),对共享空间的写/读进行控制。

类比:
进程 = 物品
共享空间 = 钱
用钱进行交换,而不用物物交换

消息传递模式

在消息传递模式中,进程间的数据交换是以格式化的消息(Message)为单位的。
进程通过系统提供的发送消息接收消息两个原语进行数据交换。

Image

若通信进程之间不存在可直接访问的共享空间,则必须利用操作系统提供的信息传递方法实现进程通信。

可分为直接和间接两种通信方式:

  • 直接:将消息发送给接收进程,并将它挂在接收进程的信息缓冲队列中,接收进程从消息缓冲队列中取得消息。

  • 间接:将消息发送给某个中间实体(信箱),接受进程从中间实体中取得消息,又称为信箱通信方式。

    类比:
    甲给乙写信
    直接:甲直接把信交给乙
    间接:甲通过邮差把信交给乙

共享文件模式

共享文件:用于连接一个发送进程和一个接收进程,以实现它们之间通信的文件,就是共享文件,又名 pipe(管道)文件
向管道提供输入的发送进程,以字节流形式将大量的数据送入管道;
而接收管道输出的接收进程,则从管道中接收数据。

Image

为了协调双方的通信,管道机制必须提供互斥、同步和确定对方存在三方面的协调能力。

共享内存模式与共享文件模式的区别

共享内存和消息队列,FIFO,管道传递消息的区别:

消息队列,FIFO,管道的消息传递方式一般为:

  1. 服务器得到输入

  2. 通过管道,消息队列写入数据,通常需要从进程拷贝到内核。

  3. 客户从内核拷贝到进程

  4. 然后再从进程中拷贝到输出文件

上述过程通常要经过4次拷贝,才能完成文件的传递。

共享内存只需要:

  1. 从输入文件到共享内存区

  2. 从共享内存区输出到文件

上述过程不涉及到内核的拷贝,所以花的时间较少,共享内存最快。

参考:https://blog.csdn.net/m0_37806112/article/details/81671429

线程

对线程最基本的理解就是“轻量级进程”,它是一个基本的 CPU 执行单元,也是程序执行流的最小单元,由线程 ID、程序计数器、寄存器集合和堆栈组成。(即 CPU 调度的基本单元
线程控制块(Thread Control Block, TCB):保存运行期间线程的数据,TCB线程存在的唯一标志

  • 线程属于进程,是进程的一个实体,是被系统独立和分配的基本单位。

  • 线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可以与同属一个进程的其他线程共享进程所拥有的全部资源。

  • 一个进程可以创建和撤销另一个线程,同一个进程中的多个线程之间可以并发执行。

区别

  • 进程是资源分配和调度的一个独立单元;
    线程是 CPU 调度的基本单元。

  • 同一个进程中可以包括多个线程,并且线程共享整个进程的资源(寄存器、堆栈、上下文),一个进程至少包括一个线程。

  • 进程的创建调用 fork 或者 vfork,而线程的创建调用 pthread_create;
    进程结束后它拥有的所有线程都将销毁,而线程的结束不会影响同个进程中的其他线程的结束。

  • 线程是轻量级的进程,它的创建和销毁所需要的时间比进程小很多,所有操作系统中的执行功能都是创建线程去完成的。

  • 线程中执行时一半都要进行同步和互斥,因为它们共享同一进程的所有资源。

  • 线程有自己的私有属性 TCB、线程 id、寄存器、硬件上下文;
    进程也有自己的私有属性进程控制块 PCB,
    这些私有属性是不被共享的,用来表示一个进程或一个线程的标志。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

进程与线程 的相关文章

  • 什么是BSP?理解LINUX BSP

    BSP 可支持操作系统更好地运行于硬件主板 BSP xff08 Board Support Package xff09 指板级支持包 对于一般的嵌入式系统 xff0c 硬件部分需要嵌入式硬件工程师设计硬件电路 xff0c 而新出厂的电路板需
  • c++11 std::move() 的使用

    std move函数可以以非常简单的方式将左值引用转换为右值引用 xff08 左值 左值引用 右值 右值引用 参见 xff1a http www cnblogs com SZxiaochun p 8017475 html xff09 通过s
  • Adaptive AUTOSAR 学习笔记 3 - AP 背景、技术及特征

    本系列学习笔记基于 AUTOSAR Adaptive Platform 官方文档 R20 11 版本 本文从AUTOSAR EXP PlatformDesign pdf开始 xff0c 一边学习 xff0c 一边顺带着翻译一下 尽力而为 x
  • MySQL导入数据(命令行、脚本方式)

    docker安装MySQL并导入数据 安装步骤省略 xff0c 详细可参考百度上文档 一 命令方式 1 把数据传进服务器中 dfc span class token annotation punctuation 64 BBC span sp
  • Linux 终端快捷键

    Linux 终端快捷键 你可能会有这样的疑问 xff1a 对于有些快捷键 xff0c 明明有等效的 一个按键就能搞定的操作 xff0c 为什么非要舍近求远 用两个组合键来实现 xff1f 当对键盘 终端命令熟练到一定程度之后 xff0c 你
  • Adaptive AUTOSAR----Adaptive studio

    Adaptive studio Adaptive Studio 是包含在 RTA VRTE SK 中的 AUTOSAR 编辑器 Adaptive studio 通过高级抽象支持所有 adaptives autosar arxml 元素的配置
  • Linux tcpdump命令详解

    简介 用简单的话来定义tcpdump xff0c 就是 xff1a dump the traffic on a network xff0c 根据使用者的定义对网络上的数据包进行截获的包分析工具 tcpdump可以将网络中传送的数据包的 头
  • 什么是 E2E 保护 ?

    安全在每个领域都是一个永恒的话题 xff0c 汽车也不例外 xff0c 而随着最近几年汽车电动化 智能化和网联化的发展 xff0c 汽车安全也越来越受到用户及开发人员的重视 xff0c 安全的要素也是多方面的 xff0c 例如用户可能关心在
  • CAN总线基础

    概述 汽车电子设备的不断增多 xff0c 对汽车上的线束分布以及信息共享与交流提出了更高的要求 传统的电气系统往往采用单一连接的方式通信 xff0c 这必将带来线束的冗余以及维修的成本的提高 单一布线连接 传统的单一通信的对接方式 xff0
  • 说一说LIN总线

    前几天小编画点时间看了一些关于LIN总线基础的内容 xff0c 把其中的关键点提取了出来 xff0c 在这里分享给大家 在这里你可能要问 不都有CAN总线了吗 xff1f 这个LIN总线又是从哪里来的 xff1f 其实理由很简单 xff0c
  • CAN FD 介绍

    随着电动汽车 xff0c 无人驾驶汽车技术的快速发展 xff0c 以及对汽车高级驾驶辅助系统和人机交互HMI需求的增加 xff0c 传统的CAN总线在传输速率和带宽等方面越来越显得力不从心 xff0c 其主要原因如下 xff1a 1 通常整
  • FlexRay 介绍

    汽车上的总线技术包括 xff1a LIN CAN CAN FD FlexRay MOST及Ethernet xff0c 我们之前已经分享了LIN xff0c CAN CAN FD总线 在开始阅读之前 xff0c 如果你对已介绍的总线技术还不
  • FlexRay总线原理及应用

    由于传统的CAN解决方案不能满足汽车线控系统 xff08 X by Wire xff09 的要求 于是在 2000 年 9 月 xff0c 宝马和戴姆勒克莱斯勒联合飞利浦和摩托罗拉成立了 FlexRay 联盟 该联盟致力于推广 FlexRa

随机推荐

  • SENT信号介绍

    Vehicle攻城狮 The people who are crazy enough to think they can change the world are the ones who do SENT背景介绍 提到车载总线 xff0c
  • Linux 日志管理

    常用日志文件 系统日志是由一个名为syslog的服务管理的 xff0c 如以下日志文件都是由syslog日志服务驱动的 xff1a var log boot log xff1a 录了系统在引导过程中发生的事件 xff0c 就是Linux系统
  • SPI 通讯协议

    Cuitbasics 汽车ECU设计 2 2 当您将微控制器连接到传感器 xff0c 显示器或其他模块时 xff0c 您是否考虑过这两种设备是如何相互通信的 xff1f 他们到底在说什么 xff1f 事实上电子设备之间的通信就像人类之间的交
  • UART串口通讯

    UART代表通用异步接收器 发送器也称为串口通讯 xff0c 它不像SPI和I2C这样的通信协议 xff0c 而是微控制器中的物理电路或独立的IC UART的主要目的是发送和接收串行数据 xff0c 其最好的优点是它仅使用两条线在设备之间传
  • 一文搞懂AUTOSAR的DEM模块

    Dem全称为Diagnostic Event Manager xff0c 负责故障事件的处理 故障数据的存储和管理 简单说其功能是故障事件确认前的故障debounce xff0c 故障事件确认时的故障数据存储 xff0c 故障发生后的故障老
  • linux父子进程问题——孤儿进程与僵尸进程[总结]

    今天遇到一个linux进程启动时指定Max open files不对的问题 xff0c 导致程序建立socket异常 xff0c 进而导致fullgc问题 xff0c 影响正常服务 所以顺带又温习了下linux下的父子进程的特性 孤儿进程与
  • C++11/14/17一些好用新特性自己整理下

    1 override xff1a 子类继承父类的时候 xff0c 子类虚函数名字写错了或者参数列表不匹配会变成另外一个函数编译器无法判断对错 xff0c 和你写不写virtual也没关系 xff0c 这时候可以在虚函数结尾加上overrid
  • vector中emplace_back方法的用途

    在写代码的过程中 xff0c CLion提醒我把 span style background color ffd900 push back span 方法替换成 span style background color ffd900 empl
  • constexper+const+常量表达式

    常量表达式 xff08 const expression xff09 是指值不会改变并且在编译过程就能得到计算结果的表达式 显然 xff0c 字面值属于常量表达式 xff0c 用常量表达式初始化的 const 对象也是常量表达式 一个对象
  • 这篇 CPU Cache,估计也没人看

    无论你写什么样的代码都会交给 CPU 来执行 xff0c 所以 xff0c 如果你想写出性能比较高的代码 xff0c 这篇文章中提到的技术还是值得认真学习的 另外 xff0c 千万别觉得这些东西没用 xff0c 这些东西非常有用 xff0c
  • 每天一个 Linux 命令

    https blog csdn net k346k346 category 9267835 html uptime 命令 1 命令简介 uptime 用于显示系统总共运行了多长时间和系统的平均负载 无选项 uptime 命令会显示一行信息
  • Docker 安装Jenkins并配置Maven

    系统环境 系统版本 xff1a Centos7 9 docker安装参考此链接 xff1a https blog csdn net clover661 article details 122226083 下载docker时候如果报错参考 x
  • 一文详解自动驾驶的运行设计域(ODD)| 自动驾驶系列

    一文详解自动驾驶的运行设计域 xff08 ODD xff09 n 自动驾驶系列 2021年4月30日 xff0c SAE发布了第四版J3016 驾驶自动化分级 xff0c 这是即2014年1月16日 2016年9月30日 2018年6月15
  • QNX BSP分析

    QNX相关历史文章 xff1a QNX简介QNX Neutrino微内核QNX IPC机制QNX进程管理器QNX资源管理器QNX字符I OQNX之编写资源管理器 xff08 一 xff09 QNX之编写资源管理器 xff08 二 xff09
  • SOA面向服务的分布式架构详解

    导语 xff1a SOA作为一种面向服务的架构 xff0c 是一种软件架构设计的模型和方法论 从业务角度来看 xff0c 一切以最大化 服务 的价值为 出发点 xff0c SOA利用企业现有的各种软件体系 xff0c 重新整合并构建起一套新
  • 自动驾驶软件架构之:中间件与SOA(一)

    本文是将中间件作为一个专题 xff0c 专门展开进行详细的分析和讨论 中间件相关技术在计算机分布式系统中发展了很多年 xff0c 尤其在互联网服务 大型商业系统中得到广泛使用 随着智能网联汽车的发展 xff0c 现代汽车也逐步增加了以太网支
  • 嵌入式系统BSP基础知识

    嵌入式系统BSP基础知识 板级支持包 BSP 是定义如何支持特定硬件设备 设备组或硬件平台的信息集合 BSP 包括有关设备上存在的硬件功能的信息和内核配置信息以及所需的任何其他硬件驱动程序 除了用于基本和可选平台功能的通用 Linux 软件
  • constexpr

    constexpr 标志返回值或者其他表达式是常量 xff0c 在编译时就会被计算出来 这个关键字常被用来 C 43 43 const 和 constexpr 的区别 xff1f 知乎 include lt iostream gt usin
  • inline namespace

    include lt iostream gt using namespace std namespace ALL namespace V2014 void fun int num cout lt lt 34 int 34 lt lt 34
  • 进程与线程

    对于操作系统来说 xff0c 一个任务就是一个进程 xff08 Process xff09 xff0c 比如打开一个浏览器就是启动一个浏览器进程 xff0c 打开一个记事本就启动了一个记事本进程 xff0c 打开两个记事本就启动了两个记事本