Linux系统---进程概念

news2024/7/6 18:43:11


文章目录

  • 冯诺依曼体系结构
  • 操作系统(OS)
  • 进程的理解
  • 进程状态
  • 进程优先级
  • 环境变量
  • 进程地址空间


一、冯诺依曼体系结构

我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系。
如图为冯诺依曼体系结构图:

  • 输入设备:包括键盘, 鼠标,扫描仪, 写板等
  • 存储器:就是内存
  • 输出设备:显示器,打印机等
  • 中央处理器(CPU):含有运算器和控制器和寄存器等

注意:

  • 磁盘等硬件不属于存储器。
  • 输入设备和输出设备统称为外设,所以磁盘等硬件都属于外设。
  • 不考虑缓存情况,这里的CPU能且只能对内存进行读写,不能访问外设(输入或输出设备)
  • 外设(输入或输出设备)要输入或者输出数据,也只能写入内存或者从内存中读取。
  • 所有设备都只能直接和内存打交道。
访问速度的不同:
         CPU>存储器>外设

当数据从外设中拿出时首先加载到存储器中,然后交给CPU处理,处理之后将结果返回给存储器,然后返回给外设去。这样以加快整体的速度,如果没有存储器,那么就是CPU与外设之间的交互,相比于没有加入存储器,会拖累整体的速度。

对冯诺依曼的理解,不能停留在概念上,要深入到对软件数据流理解上,请解释,从你登录上qq开始和某位朋友聊天开始,数据的流动过程。从你打开窗口,开始给他发消息,到他的到消息之后的数据流动过程。如果是在qq上发送文件呢?

首先从键盘中输入的你发给朋友的消息,此时外设有了数据,然后外设将数据加载到存储器中,CPU进行处理,然后将处理的结果返回给外设,,然后将数据发送给网卡,对方主机中的网卡接收到该消息后,将网卡上的数据加载到存储器中,然后让CPU处理,处理之后返回给存储器,最后将数据返回给电脑上的显示屏外设。

结论:

  •         冯诺依曼体系结构中CPU不会和外设直接进行交互访问,而是通过存储器的方式。
  •         冯诺依曼体系结构提高了整机的效率。

二、操作系统(OS)

概念:任何计算机系统都包含一个基本的程序集合,称为操作系统(OS)。笼统的理解,操作系统包括: 内核(进程管理,内存管理,文件管理,驱动管理) 其他程序(例如函数库,shell程序等等)
设计 OS 的目的 :与硬件交互,管理所有的软硬件资源;为用户程序(应用程序)提供一个良好的执行环境.
定位 :在整个计算机软硬件架构中,操作系统的定位是:一款纯正的“搞管理”的软件

操作系统:是一个管理软硬件间交互的软件。

管理的本质是在管理数据。操作系统通过使用结构体将这些硬件管理起来,结构体中存储的是关于这些硬件的各种属性信息。因为Linux是由C语言写的,所以采用struct 结构体来记录资源的属性,使用相关的数据结构和算法组织起来,再进行管理。

下图为计算机的软硬件体系结构示意图:

系统调用和库函数概念

  • 在开发角度,操作系统对外会表现为一个整体,但是会暴露自己的部分接口,供上层开发使用,这部分 由操作系统提供的接口,叫做系统调用。
  • 系统调用在使用上,功能比较基础,对用户的要求相对也比较高,所以,有心的开发者可以对部分系统调用进行适度封装,从而形成库,有了库,就很有利于更上层用户或者开发者进行二次开发。

总结:
计算机管理硬件
        1. 描述起来,用struct结构体
        2. 组织起来,用链表或其他高效的数据结构

三、进程的理解

1.基本概念:

概念 程序的一个执行实例,正在执行的程序等
内核角度 担当分配系统资源(CPU时间,内存)的实体。

进程=对应的PCB结构体+对应的代码和数据

2.进程-PCB结构体的理解

进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合。
操作系统中称之为PCB(process control block),Linux操作系统下的PCB是: task_struc t
 
task_struct是Linux内核的一种数据结构,它会被装载到RAM(内存)里并且包含着进程的信息,该结构主要是用来记录该进程相关的属性。

3.task_ struct内容分类

  • 标示符: 描述本进程的唯一标示符,用来区别其他进程。
  • 状态: 任务状态,退出代码,退出信号等。
  • 优先级: 相对于其他进程的优先级。
  • 程序计数器: 程序中即将被执行的下一条指令的地址。
  • 内存指针: 包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针
  • 上下文数据: 进程执行时处理器的寄存器中的数据[休学例子,要加图CPU,寄存器]。
  • I/O状态信息: 包括显示的I/O请求,分配给进程的I/O设备和被进程使用的文件列表。
  • 记账信息: 可能包括处理器时间总和,使用的时钟数总和,时间限制,记账号等。
  • 其他信息

4.组织进程和查看进程

组织进程:可以在内核源代码里找到它。所有运行在系统里的进程都以task_struct链表的形式存在内核里。

查看进程:进程的信息可以通过 /proc 系统文件夹查看

 如:要获取PID为1的进程信息,你需要查看 /proc/1 这个文件夹。

   大多数进程信息同样可以使用top和ps这些用户级工具来获取

单独使用ps aux显示出所有进程信息,利用grep命令来指定某个进程相关信息

 终止某个进程的方式可以使用ctrl+c,也可以使用kill -9 某个进程的pid来终止,ctrl+c本质上也是发送9号信号。

5.通过系统调用获取进程标示符

1.通过getpid和getppid的方式来获取父子进程表示符

进程id(PID)
父进程id(PPID)

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>

int main()
{
  printf("pid:%d\n",getpid());
  printf("ppid:%d\n",getppid());
  return 0;
}

 

2.利用fork来获取进程标示符

 fork是一个系统调用接口,其主要就是创建一个子进程,该函数执行一次,有两个返回值,父进程返回子进程的pid,,子进程返回0。其中父子进程代码共享,数据各自开辟空间,私有一份(采用写时拷贝)

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>

int main()
{
  pid_t id=fork();
  if(id==0){
    //子进程
    while(1){
      printf("I am child process,我的pid是:%d,我的父进程是:%d\n",getpid(),getppid());
      sleep(1);
    }
  }
  else{
    //父进程
    while(1){
      printf("I am father process,我的pid是:%d,我的父进程是:%d\n",getpid(),getppid());
      sleep(1);
    }
  }
  return 0;
}

 

 由于fork之后,父子进程会共享代码发生了写时拷贝,由于fork之后,返回值不同,进而可以执行不同的代码块。fork之后,父子进程进行的先后顺序是由于cpu中的调度器和相应的调度算法决定。

fork函数,为什么有两次返回?相关链接

四、进程状态

1.Linux下的进程状态

  • R运行状态(running): 并不意味着进程一定在运行中,它表明进程要么是在运行中要么在运行队列里。
  • S睡眠状态(sleeping): 意味着进程在等待事件完成(这里的睡眠有时候也叫做可中断睡眠 (interruptible sleep))。
  • D磁盘休眠状态(Disk sleep): 有时候也叫不可中断睡眠状态(uninterruptible sleep),在这个状态的进程通常会等待IO的结束。
  • T停止状态(stopped) 可以通过发送 SIGSTOP 信号给进程来停止(T)进程。这个被暂停的进程可以通过发送 SIGCONT 信号让进程继续运行。
  • X死亡状态(dead): 这个状态只是一个返回状态,你不会在任务列表里看到这个状态。
  • Z(zombie)-僵尸状态 : 僵死状态(Zombies)是一个比较特殊的状态。当进程退出并且父进程 没有读取到子进程退出的返回代码时就会产生僵死(尸)进程僵死进程会以终止状态保持在进程表中,并且会一直在等待父进程读取退出状态代码。所以,只要子进程退出,父进程还在运行,但父进程没有读取子进程状态,子进程进入Z状态

Linux内核中进程状态源代码:

/*
* The task state array is a strange "bitmap" of
* reasons to sleep. Thus "running" is zero, and
* you can test for combinations of others with
* simple bit tests.
*/
static const char * const task_state_array[] = {
"R (running)", /* 0 */
"S (sleeping)", /* 1 */
"D (disk sleep)", /* 2 */
"T (stopped)", /* 4 */
"t (tracing stop)", /* 8 */
"X (dead)", /* 16 */
"Z (zombie)", /* 32 */
};

2.进程阻塞和进程挂起

进程阻塞:正在运行的进程,由于等待某个事件发生而无法执行时,便放弃处理机而进入阻塞状态。引起进程阻塞的事件有很多种,例如,等待I/O完成、申请缓冲区不能满足、等待信号等。

进程挂起:当内存不足时,OS通过适当的置换进程的代码和数据到磁盘,进程的状态就叫做挂起。

3. 进程状态查看

ps aux / ps axj 命令
常见的进程状态查看命令:
  • ps aux | head -1 && ps aux | grep 进程PID
  • ps ajx |head -1 && ps ajx |grep 进程PID

  • 1)  ps a 显示现行终端机下的所有程序,包括其他用户的程序。
  • 2)ps -A 显示所有程序。
  • 3)ps c 列出程序时,显示每个程序真正的指令名称,而不包含路径,参数或常驻服务的标示。
  • 4)ps -e 此参数的效果和指定"A"参数相同。
  • 5)ps e 列出程序时,显示每个程序所使用的环境变量。
  • 6)ps f 用ASCII字符显示树状结构,表达程序间的相互关系。
  • 7)ps -H 显示树状结构,表示程序间的相互关系。
  • 8)ps -N 显示所有的程序,除了执行ps指令终端机下的程序之外。
  • 9)ps s 采用程序信号的格式显示程序状况。
  • 10)ps S 列出程序时,包括已中断的子程序资料。
  • 11)ps -t 指定终端机编号,并列出属于该终端机的程序的状况。
  • 12)ps u 以用户为主的格式来显示程序状况。
  • 13)ps x 显示所有程序,不以终端机来区分。
  • ps是显示当前状态处于running的进程,grep表示在这些里搜索,而ps aux是显示所有进程和其状态。

4.前后台进程

前台进程:

默认情况下,我们启动的每一个进程都是前台进程。它从键盘获得输入并发送它的输出到屏幕。

当一个进程运行在前台时,我们不能在同一命令行提示符下运行任何其他命令(启动任何其他进程),因为在程序结束它的进程之前命令行提示符不可用。

 从这里可以看出+表示该进程是一个前台进程。

后台进程:

利用kill -19 PID来暂停该进程

利用kill -18 PID来继续执行该进程

 暂停前:

 暂停时:

 继续执行:

 由上图我们可以知道该进程由前台进程变为后台进程,注意后台进程用ctrl+c无法停止,只能使用kill -9来终止该进程。

5.进程状态的分类

1.运行状态(R)

测试R状态代码:

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>

int main()
{
  int a=0;
  while(1){
    a=1+1;
  }
  return 0;
}

这里我们可以发现该进程状态为R+,表示该进程为前台进程就是正在运行或者是在运行队列中的进程。

 2.睡眠状态(S)

测试S状态代码:

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>

int main()
{
  printf("I am running\n");
  printf("我的pid是:%d\n",getpid());
  sleep(10);
  return 0;
}

 由上图我们可以知道该进程是处于S状态,表示该进程味着进程在等待事件完成。处于浅度睡眠状态可以随时被中断,也可以随时被终止,所以该状态可以叫做可中断睡眠状态。

3.磁盘休眠状态(D)

有时候也叫不可中断睡眠状态(uninterruptible sleep),在这个状态的进程通常会等待IO的结束。

 

 所以该状态表示一个进程处以深度睡眠状态,该进程不会被操作系统释放,只有该进程自动唤醒时才可以恢复。

4.停止状态(T)

可以通过发送 SIGSTOP 信号给进程来停止(T)进程。这个被暂停的进程可以通过发送 SIGCONT 信号让进程继续运行

 测试T状态代码:

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>

int main()
{
 while(1){
  printf("我是一个进程pid:%d\n",getpid());
 }
return 0;
}

5.死亡状态(X)

这个状态只是一个返回状态,你不会在任务列表里看到这个状态。当父进程读取子进程的返回结果时,子进程立刻释放资源。死亡状态是非常短暂的,几乎不可能通过ps命令捕捉到。

6.僵尸状态(Z)

  • 僵死状态(Zombies)是一个比较特殊的状态。当进程退出并且父进程(使用wait()系统调用)没有读取到子进程退出的返回代码时就会产生僵死(尸)进程
  • 僵死进程会以终止状态保持在进程表中,并且会一直在等待父进程读取退出状态代码。
  • 所以,只要子进程退出,父进程还在运行,但父进程没有读取子进程状态,子进程进入Z状态

测试Z状态代码:

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>

int main()
{
  printf("I am running...\n");
  pid_t id=fork();

  if(id==0){
    //child
    int cnt=5;
    while(cnt){
      printf("I am child,我的pid是:%d,我的ppid:%d,cnt:%d\n",getpid(),getppid(),--cnt);
      sleep(1);
    }
    printf("child quit\n");
    exit(1);
  }
  else{
    while(1){
      printf("I am father,我的pid是:%d,我的ppid:%d\n",getpid(),getppid());
      sleep(1);
    }
  }
  return 0;
}

 这里我们可以看到子进程变为Z+状态,该状态被称之为僵尸状态,该进程称之为僵尸进程。

 僵尸进程危害

  • 进程的退出状态必须被维持下去,因为他要告诉关心它的进程(父进程),你交给我的任务,我办的怎么样了。可父进程如果一直不读取,那子进程就一直处于Z状态。
  • 维护退出状态本身就是要用数据维护,也属于进程基本信息,所以保存在                task_struct(PCB)中,换句话说,Z状态一直不退出,PCB一直都要维护。
  • 那一个父进程创建了很多子进程,就是不回收,是不是就会造成内存资源的浪费。因为数据结构对象本身就要占用内存,想想C中定义一个结构体变量(对象),是要在内存的某个位置进行开辟空间!
  • 内存泄漏

7.孤儿状态

父进程如果提前退出,那么子进程后退出,进入Z之后,那该如何处理呢?

  • 父进程先退出,子进程就称之为“孤儿进程”
  • 孤儿进程被1号init进程领养,当然要有init进程回收喽。

测试孤儿状态代码:

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main()
{
  pid_t id = fork();
  if(id < 0){
  perror("fork");
  return 1;
  }
  else if(id == 0){//child
  printf("I am child, pid : %d\n", getpid());
  sleep(10);
  }else{//parent
  printf("I am parent, pid: %d\n", getpid());
  sleep(3);
  exit(0);
  }
return 0;
}

 这里我们可以发现子进程被1号进程领养,该状态被称之为孤儿状态,该进程称为孤儿进程。

五、进程优先级

基本概念:

  • cpu资源分配的先后顺序,就是指进程的优先权(priority)。
  • 优先权高的进程有优先执行权利。配置进程优先权对多任务环境的linux很有用,可以改善系统性能。
  • 还可以把进程运行到指定的CPU上,这样一来,把不重要的进程安排到某个CPU,可以大大改善系统整体性能。

1.查看系统进程

在linux或者unix系统中,用ps –l命令则会类似输出以下几个内容:

  • UID : 代表执行者的身份
  • PID : 代表这个进程的代号
  • PPID :代表这个进程是由哪个进程发展衍生而来的,亦即父进程的代号
  • PRI :代表这个进程可被执行的优先级,其值越小越早被执行
  • NI :代表这个进程的nice值

2.PRI and NI

  • PRI即进程的优先级,或者通俗点说就是程序被CPU执行的先后顺序,此值越小进程的优先级别越高 ,该值默认为80。
  • NI就是我们所要说的nice值了,其表示进程可被执行的优先级的修正数值
  • PRI值越小越快被执行,那么加入nice值后,将会使得PRI变为:PRI(new)=PRI(old)+nice
  • 这样,当nice值为负值的时候,那么该程序将会优先级值将变小,即其优先级会变高,则其越快被执行
  • 所以,调整进程优先级,在Linux下,就是调整进程nice值,nice其取值范围是-20至19,一共40个级别。

注意:进程的nice值不是进程的优先级,他们不是一个概念,但是进程nice值会影响到进程的优先级变化。可以理解nice值是进程优先级的修正修正数据。

3.查看进程优先级的命令

top 命令更改已存在进程的 nice:
top
进入top后按“r”–>输入进程PID–>输入nice值

4.关于进程的其他概念

  • 竞争性: 系统进程数目众多,而CPU资源只有少量,甚至1个,所以进程之间是具有竞争属性的。为了高效完成任务,更合理竞争相关资源,便具有了优先级
  • 独立性: 多进程运行,需要独享各种资源,多进程运行期间互不干扰
  • 并行: 多个进程在多个CPU下分别,同时进行运行,这称之为并行
  • 并发: 多个进程在一个CPU下采用进程切换的方式,在一段时间之内,让多个进程都得以推进,称之为并发

六、环境变量

  • 环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数如:我们在编写C/C++代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪里,但是照样可以链接成功,生成可执行程序,原因就是有相关环境变量帮助编译器进行查找。
  • 环境变量通常具有某些特殊用途,还有在系统当中通常具有全局特性

常见环境变量

  • PATH : 指定命令的搜索路径
  • HOME : 指定用户的主工作目录(即用户登陆到Linux系统中时,默认的目录)
  • SHELL : 当前Shell,它的值通常是/bin/bash。

查看环境变量方法
echo $PATH //PATH:你的环境变量名称
env | grep PATH

和环境变量相关的命令

  • 1. echo: 显示某个环境变量值
  • 2. export: 设置一个新的环境变量
  • 3. env: 显示所有环境变量
  • 4. unset: 清除环境变量
  • 5. set: 显示本地定义的shell变量和环境变量

七、进程地址空间

进程地址空间布局图

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/831894.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【BEV感知】2-BEV感知算法数据形式

文章目录 1 图像1.1 如何获取图像特征&#xff1f; 2 点云2.1 稀疏性2.2 无序性2.3 为什么要用点云&#xff1f;2.4 如何提取点云特征&#xff1f;Point-basedVoxel-based 3 图像点云 1 图像 图像是由相机生成的&#xff0c;是将三维世界中的坐标点&#xff08;单位为米&#…

I- yh的线段(2023河南萌新联赛第(四)场:河南大学)

链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 来源&#xff1a;牛客网 yh喜欢好线段&#xff0c;好线段即两条线段相交且不与其他线段重合的线段。 两条线段[l1,r1]和[l2,r2]相交(如果存在至少一个x&#xff0c;使得l1≤x≤r1和l2≤x≤r2&#xff0c;则认为两个线段…

Linux运维面试题(四)之Linux服务管理

Linux运维面试题&#xff08;四&#xff09;之Linux服务管理 4.1 SSHSSH的登录验证方式SSH的登陆端口&#xff08;默认22&#xff09;和监听设置&#xff08;/etc/ssh/sshd_config&#xff09;SSH的登录用户限制(/etc/ssh/sshd_config PermitRootLogin)SSH的登录超时设置(/etc/…

软件测试之Docker常见问题汇总!附解决方法!

1、配置国内源进行docker安装&#xff0c;报错 HTTP Error 404 - Not Found 【整整200集】超超超详细的Python接口自动化测试进阶教程&#xff0c;真实模拟企业项目实战&#xff01;&#xff01; 原因&#xff1a; 由于配置国内镜像源时&#xff0c;把地址写错了&#xff0c;导…

使用火山云搜索ESCloud服务构建图文检索应用(以文搜图/以图搜图)

图文检索在生活中具有广泛的应用&#xff0c;常见的图片检索包括基于文本内容搜索和基于图片内容搜索。用户通过输入文字描述或上传图片就可以在海量的图片库中快速找到同款或者相似图片&#xff0c;这种搜索方式被广泛应用于电商、广告、设计以及搜索引擎等热门领域。 本文基…

Windows服务器中IIS部署图片文件夹—超详细图文

Windows服务器中IIS部署图片文件夹—超详细图文 注意&#xff1a;部署前请先安装IIS IIS安装步骤可参照&#xff1a;win11安装IIS步骤—图解_win11 iis_咏絮v的博客-CSDN博客 1、打开 IIS管理器—选择【网站】后右键【添加站点】 2、【添加网站】(填写网站名称/物理路径/IP地…

2023华数杯数学建模C题思路代码 母亲身心健康影响

C 题 母亲身心健康对婴儿成长的影响 母亲是婴儿生命中最重要的人之一&#xff0c;她不仅为婴儿提供营养物质和身体保护&#xff0c; 还为婴儿提供情感支持和安全感。母亲心理健康状态的不良状况&#xff0c;如抑郁、焦虑、 压力等&#xff0c;可能会对婴儿的认知、情感、社会行…

【java】【maven】【基础】MAVEN安装配置介绍

目录 1 下载 2 安装-windows为例 3 配置环境变量 3.1 JAVA_HOME 3.2 MAVEN_HOME 3.3 PATH 3.4 验证 4 MAVEN基础概念 4.1 仓库概念 4.2 坐标概念 4.2.1 打开网址 4.2.2 输入搜索内容junit 4.2.3 找到对应API名称点击 4.2.4 点击对应版本 4.2.5 复制MAVEN坐标 4.3 配置…

计算机网络(4) --- 协议定制

计算机网络&#xff08;3&#xff09; --- 网络套接字TCP_哈里沃克的博客-CSDN博客https://blog.csdn.net/m0_63488627/article/details/132035757?spm1001.2014.3001.5501 目录 1. 协议的基础知识 TCP协议通讯流程 ​编辑 2.协议 1.介绍 2.手写协议 1.内容 2.接口 …

Vulnhub: blogger:1靶机

kali&#xff1a;192.168.111.111 靶机&#xff1a;192.168.111.176 信息收集 端口扫描 nmap -A -sC -v -sV -T5 -p- --scripthttp-enum 192.168.111.176 在80端口的/assets/fonts/目录下发现blog目录&#xff0c;访问后发现为wordpress 利用wpscan发现wordpress插件wpdisc…

WiFi爆破实战

提示&#xff1a;本文记录了博主的一次WiFi爆破实战 文章目录 写在前面一、将网卡连接Kali虚拟机二、网卡配置骤2.1 识别网卡2.2 净化环境2.3 启动监听2.4 探测周边WiFi 三、实施攻击3.1 对选定的目标WiFi实施监听3.2 发起DOS攻击3.3 实施爆破 写在最后 写在前面 提示&#xf…

LNMP搭建及论坛搭建

一、LNMP LNMP架构是目前成熟的企业网站应用模式之一&#xff0c;指的是协同工作的一整套系统和相关软件&#xff0c; 能够提供动态Web站点服务及其应用开发环境。LNMP是一个缩写词&#xff0c;具体包括Linux操作系统、nginx网站服务器、MySQL数据库服务器、PHP&#xff08;或…

实用,3分钟免费生成中小学新生录取查询系统

在新学期开始之际&#xff0c;作为招生负责人&#xff0c;您是否已经做好准备来迎接新学年的招生工作呢&#xff1f;录取新生所需的任务包括成绩信息的录入、招生要求的核对以及新生录取信息的查询公布&#xff0c;这些繁重的工作给负责招生的老师带来了巨大的压力和挑战。 为…

Dockerfile构建LNMP镜像

建立工作目录 [rootlocalhost ~]# mkdir lnmp [rootlocalhost ~]# cd lnmp/ 编写Dockerfile文件 [rootlocalhost lnmp]# vim Dockerfile [rootlocalhost lnmp]# ll 总用量 4 -rw-r--r--. 1 root root 774 8月 3 14:54 Dockerfile [rootlocalhost lnmp]# vim Dockerfile #基础…

2023年华数杯A题

A 题 隔热材料的结构优化控制研究 新型隔热材料 A 具有优良的隔热特性&#xff0c;在航天、军工、石化、建筑、交通等 高科技领域中有着广泛的应用。 目前&#xff0c;由单根隔热材料 A 纤维编织成的织物&#xff0c;其热导率可以直接测出&#xff1b;但是 单根隔热材料 A 纤维…

软件为什么要进行性能压力测试?

软件为什么要进行性能压力测试&#xff1f;随着软件应用的不断增多和复杂度的提高&#xff0c;软件的性能对用户体验和业务成功至关重要。性能问题可能导致软件运行缓慢、崩溃或无响应&#xff0c;给用户带来不便甚至损失。为了确保软件能够在高负载和压力下正常运行&#xff0…

spring-bean的生命周期和怎么配置spring-bean的后置处理器

&#x1f600;前言 本章是spring基于XML 配置bean系类中第6篇讲解spring-bean的生命周期和怎么配置spring-bean的后置处理器 &#x1f3e0;个人主页&#xff1a;尘觉主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是尘觉&#xff0c;希望我的文章可以帮助到大家…

Storm学习之使用官方Docker镜像快速搭建Storm运行环境

文章目录 0.前言搭建完的效果 1.教程1.1.docker 安装 zookeeper1.2. 安装 storm nimbus1.3.docker 安装 supervisor1.4.docker 安装 storm-ui1.5.查看已经启动的容器1.6.提交topology到 storm集群 2.总结3.参考文档 0.前言 Apache Storm 官方也出了Docker 镜像 https://hub.do…

Python3 高级教程 | Python3 CGI编程(二)

目录 一、什么是CGI 二、网页浏览 三、CGI架构图 四、Web服务器支持及配置 五、第一个CGI程序 六、HTTP头部 七、CGI环境变量 八、GET和POST方法 &#xff08;一&#xff09;使用GET方法传输数据 &#xff08;二&#xff09;简单的url实例&#xff1a;GET方法 &#x…

CSPM国标项目管理认证未来值得期待吗?

一、CSPM认证背景信息 CSPM是由全国项目管理标准化技术委员会&#xff08;SAC/TC343&#xff09;和中国国际人才交流基金会&#xff08;原外专局&#xff09;联合发起的项目管理专业认证。 首先&#xff0c;让我们了解下这两个国字号单位的来历。全国项目管理标准化技术委员会…