当前位置: 首页 > news >正文

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第二篇 Linux系统编程篇-第三十四章 进程基础

i.MX8MM处理器采用了先进的14LPCFinFET工艺,提供更快的速度和更高的电源效率;四核Cortex-A53,单核Cortex-M4,多达五个内核 ,主频高达1.8GHz,2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT、4G模块、CAN、RS485等接口一应俱全。H264、VP8视频硬编码,H.264、H.265、VP8、VP9视频硬解码,并提供相关历程,支持8路PDM接口、5路SAI接口、2路Speaker。系统支持Android9.0(支持获取root限)Linux4.14.78+Qt5.10.1、Yocto、Ubuntu20、Debian9系统。适用于智能充电桩,物联网,工业控制,医疗,智能交通等,可用于任何通用工业和物联网应用、

【公众号】迅为电子

【粉丝群】258811263(加群获取驱动文档+例程)


第二部分 进程与进程间通信

第三十四章 进程基础

本章内容对应视频讲解链接(在线观看):

进程基本知识  https://www.bilibili.com/video/BV1zV411e7Cy?p=17

进程指正在运行的程序,如下图示,是资源分配的最小单位,可以通过“ps ”或“top”等命令查看正在运行的进程,线程是系统的最小调度单位,一个进程可以拥有多个线程,同一进程里的线程可以共享此进程的同一资源。

每个进程都有一个唯一的标识符,即进程ID,简称pid

进程间的通信的几种方法?

  • 管道通信:有名管道,无名管道
  • 信号通信:信号的发送,信号的接收,信号的处理
  • IPC通信:共享内存,消息队列,信号灯
  • Socket通信

进程的三种基本状态以及转换:

34.1 进程创建

本章内容对应视频讲解链接(在线观看):

进程控制  https://www.bilibili.com/video/BV1zV411e7Cy?p=18

所有的进程都是由其他进程创建(除了pid为0号的idle进程),pid号为1的init进程是系统启动后运行的第一个进程,是所有进程的父进程,init进程会初始化一部分系统服务,创建其他进程。

创建新进程的那个进程称为父进程,新进程称为子进程,父进程和子进程拥有相同的代码段数据段,有各自独立的地址空间。采用写时拷贝技术,即创建的新进程不会立即把父进程的资源空间复制过来,只有在修改时才会复制资源,另外父进程挂起的信号和文件锁不会被子进程继承。

子进程结束后,它的父进程要回收它的资源,否则就会成为僵尸进程 。

如果父进程先结束,子进程会被init进程收养,称为孤儿进程。

创建进程常用函数如下定义: 

头文件

#include <sys/types.h>

#include <unistd.h>

函数

pid_t getpid(void);

    返回值

PID号

    功能

获取此进程PID

头文件

#include <sys/types.h>

#include <unistd.h>

函数

pid_t getppid(void);

    返回值

PID号

    功能

获取父进程PID

头文件

 #include <unistd.h>

函数

pid_t fork(void);

    返回值

调用成功父进程返回子进程号,子进程返回0,失败返回-1。

    功能

系统调用,创建一个进程

实验代码

代码在配套资料“iTOP-i.MX8MM开发板\02-i.MX8MM开发板网盘资料汇总(不含光盘内容)\嵌入式Linux开发指南(iTOP-i.MX8MM)手册配套资料\1.系统编程例程\系统编程配套程序\linux\14”目录下。

在程序中,父进程中创建一个子进程。

#include <stdio.h>
#include <unistd.h>
int main(void)
{pid_t pid;pid = fork();if (pid < 0){printf("fork is error \n");return -1;}//父进程if (pid > 0){printf("This is parent,parent pid is %d\n", getpid());}//子进程if (pid == 0){printf("This is child,child pid is %d,parent pid is %d\n", getpid(), getppid());}return 0;
}

在Ubuntu上编译运行,打印进程号如下图所示:

34.2 exec函数族

本章内容对应视频讲解链接(在线观看):

exec函数族  https://www.bilibili.com/video/BV1zV411e7Cy?p=19

用fork函数创建子进程后,子进程往往要调用一种exec函数以执行另一个程序,该子进程被新的程序替换,改变地址空间,进程映像和一些属性,但是pid号不变。exec函数详解如下表所示:

函数

int execve(const char *filename, char *const argv[], char *const envp[]);

头文件

#include <unistd.h>

参数filename

路径名,表示载入进程空间的新程序路径。

参数argv[]

命令行参数,argv[0]为命令名

参数envp[]

新程序的环境变量

返回值

成功时不会返回,使用时不用检查返回值,可通过errno检查。

以下函数都是根据execve实现:

int execl(const char *path, const char *arg, .../* (char  *) NULL */);

    int execlp(const char *file, const char *arg, .../* (char  *) NULL */);

int execle(const char *path, const char *arg, .../*, (char *) NULL, char * const envp[] */);

int execv(const char *path, char *const argv[]);

int execvp(const char *file, char *const argv[]);

int execvpe(const char *file, char *const argv[],char *const envp[]);

实验代码:

代码在配套资料“iTOP-i.MX8MM开发板\02-i.MX8MM开发板网盘资料汇总(不含光盘内容)\嵌入式Linux开发指南(iTOP-i.MX8MM)手册配套资料\1.系统编程例程\系统编程配套程序\linux\15”目录下。

创建子进程,子进程使用execl打印hello world。

    #include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main(void)
{int i=0;pid_t pid;pid = fork();if (pid < 0){printf("fork is error \n");return -1;}//父进程if (pid > 0){printf("This is parent,parent pid is %d\n", getpid());}//子进程if (pid == 0){printf("This is child,child pid is %d\n", getpid(), getppid());//改为自己的路径execl("/home/samba/linux/15/hello","hello",NULL);exit(1);}i++;printf("i is %d\n",i);return 0;
}

编写hello.c文件,内容如下所示:

#include <stdio.h>
#include <unistd.h>
int main(void)
{printf("hello world\n");return 0;
}

编译hello.c如下图所示:

执行结果:

34.3 ps和kill命令

本章内容对应视频讲解链接(在线观看):

ps和kill命令  https://www.bilibili.com/video/BV1zV411e7Cy?p=20

ps命令:ps命令可以列出系统中当前运行的那些进程。

命令格式:ps [参数]

命令功能:用来显示当前进程的状态

常用参数: aux

kill命令:kill命令用来杀死进程

举例:kill -9(SIGKILL) PID

进程的状态

D: 无法中断的休眠状态 (通常 IO 的进程)

R: 正在执行中

S: 静止状态

T: 暂停执行

Z: 不存在但暂时无法消除

W: 没有足够的记忆体分页可分配

<: 高优先序的行程

N: 低优先序的行程

L: 有记忆体分页分配并锁在记忆体内 (实时系统或捱A I/O)

如下所示,使用命令“ps aux | grep a.out”查找到./a.out的进程号为3179,然后输入“kill -9 3179”结束此进程,

34.4 孤儿进程与僵尸进程

本章内容对应视频讲解链接(在线观看):

孤儿进程和僵尸进程  https://www.bilibili.com/video/BV1zV411e7Cy?p=21

孤儿进程:父进程结束以后,子进程还未结束,这个子进程就叫做孤儿进程。

僵尸进程:子进程结束以后,父进程还在运行,但是父进程不去释放进程控制块,这个子进程就叫做僵尸进程。

实验代码

代码在配套资料“iTOP-i.MX8MM开发板\02-i.MX8MM开发板网盘资料汇总(不含光盘内容)\嵌入式Linux开发指南(iTOP-i.MX8MM)手册配套资料\1.系统编程例程\系统编程配套程序\linux\16”目录下。

在程序中,创建的子进程变为孤儿进程。

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main(void)
{int i=0;pid_t pid;// 创建一个子进程pid = fork();if (pid < 0){printf("fork is error \n");return -1;}//父进程 让父进程先结束,并打印进程PIDif (pid > 0){printf("pid is %d\n", getpid());}//子进程,让子进程等待一会,让父进程先结束,并打印子进程的父进程的pidif (pid == 0){sleep(2);printf("parent pid is %d\n", getppid());}return 0;
}

编译运行,如下图所示:

如上图所示,子进程中打印的父进程的进程号和父进程的进程号是不一样的,说明创建的子进程变成了孤儿进程,此进程被系统的init进程"领养"了,如下图所示:

实验代码

在程序中,子进程变为僵尸进程。

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main(void)
{int i=0;pid_t pid;// 创建一个子进程pid = fork();if (pid < 0){printf("fork is error \n");return -1;}//父进程 让父进程先结束,并打印进程PIDif (pid > 0){while(1);}//子进程,让子进程先结束if (pid == 0){printf("This is child\n");exit(0);}return 0;
}

编译运行,如下图所示:

再打开另一个终端,查看此进程如下图所示为僵尸进程。

34.5 wait()函数

本章内容对应视频讲解链接(在线观看):

wait函数  https://www.bilibili.com/video/BV1zV411e7Cy?p=22

wait()函数一般用在父进程中等待回收子进程的资源,而防止僵尸进程的产生。

函数

pid_t wait(int *status)

头文件

#include <sys/wait.h>

返回值

成功返回回收的子进程的pid,失败返回-1

与wait函数的参数有关的俩个宏定义:

WIFEXITED(status):如果子进程正常退出,则该宏定义为真

WEXITSTATUS(status):如果子进程正常退出,则该宏定义的值为子进程的退出值。

实验代码

代码在配套资料“iTOP-i.MX8MM开发板\02-i.MX8MM开发板网盘资料汇总(不含光盘内容)\嵌入式Linux开发指南(iTOP-i.MX8MM)手册配套资料\1.系统编程例程\系统编程配套程序\linux\17”目录下。

在程序中,使用wait()函数,防止僵尸进程的产生。

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/wait.h>int main(void)
{pid_t  pid;pid = fork();if(pid < 0){printf("error\n");}if(pid > 0){    int status;wait(&status);if(WIFEXITED(status)==1){printf("return value is %d\n",WEXITSTATUS(status));}while(1);}if(pid == 0){sleep(2);   printf("This is child\n");exit(6);}return 0;
}   

编译运行,如下图所示:

34.6 守护进程

本章内容对应视频讲解链接(在线观看):

守护进程  https://www.bilibili.com/video/BV1zV411e7Cy?p=23

1.什么是守护进程?

守护进程(daemon)是一类在后台运行的特殊进程,用于执行特定的系统任务。很多守护进程在系统引导的时候启动,并且一直运行直到系统关闭。另一些只在需要的时候才启动,完成任务后就自动结束。

用户使守护进程独立于所有终端是因为,在守护进程从一个终端启动的情况下,这同一个终端可能被其他的用户使用。例如,用户从一个终端启动守护进程后退出,然后另外一个人也登录到这个终端。用户不希望后者在使用该终端的过程中,接收到守护进程的任何错误信息。同样,由终端键入的任何信号(例如中断信号)也不应该影响先前在该终端启动的任何守护进程的运行。虽然让服务器后台运行很容易(只要shell命令行以&结尾即可),但用户还应该做些工作,让程序本身能够自动进入后台,且不依赖于任何终端。 守护进程没有控制终端,因此当某些情况发生时,不管是一般的报告性信息,还是需由管理员处理的紧急信息,都需要以某种方式输出。Syslog 函数就是输出这些信息的标准方法,它把信息发送给 syslogd 守护进程。

2.怎么创建一个守护进程?

有个基本要求:

  1. 必须作为我们init进程的子进程
  2. 不跟控制终端交互。

步骤:

1.使用fork函数创建一个新的进程,然后让父进程使用exit函数直接退出(必须要的)

2.调用setsid函数。(必须要的)

3.调用chdir函数,将当前的工作目录改成根目录,增强程序的健壮性。(不是必须要的)

4.重设我们umask文件掩码,增强程序的健壮性和灵活性(不是必须要的)

5.关闭文件描述符,节省资源(不是必须要的)

6.执行我们需要执行的代码(必须要的)

实验代码:

代码在配套资料“iTOP-i.MX8MM开发板\02-i.MX8MM开发板网盘资料汇总(不含光盘内容)\嵌入式Linux开发指南(iTOP-i.MX8MM)手册配套资料\1.系统编程例程\系统编程配套程序\linux\18”目录下。

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/wait.h>
#include <sys/types.h>
#include <sys/stat.h>int main(void)
{pid_t pid;// 步骤一:创建一个新的进程pid = fork();//父进程直接退出if (pid > 0){exit(0);}if (pid == 0){// 步骤二:调用setsid函数摆脱控制终端setsid();// 步骤三:更改工作目录chdir("/");// 步骤四:重新设置umask文件源码umask(0);// 步骤五:0 1 2 三个文件描述符close(1);close(2);close(3);// 步骤六:执行我们要执行的代码while (1){}}return 0;
}

 运行测试,如下图所示:

相关文章:

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第二篇 Linux系统编程篇-第三十四章 进程基础

i.MX8MM处理器采用了先进的14LPCFinFET工艺&#xff0c;提供更快的速度和更高的电源效率;四核Cortex-A53&#xff0c;单核Cortex-M4&#xff0c;多达五个内核 &#xff0c;主频高达1.8GHz&#xff0c;2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…...

使用LVS+NGinx+Netty实现数据接入

数据接入 链接参考文档 LVSKeepalived项目 车辆数据上收&#xff0c;TBox通过TCP协议连接到TSP平台 建立连接后进行数据上传。也可借由该连接实现远程控制等操作。 通过搭建 LV—NGinx—Netty实现高并发数据接入 LVS&#xff1a;四层负载均衡&#xff08;位于内核层&#x…...

云手机结合自主ADB命令接口 提升海外营销效率

现在&#xff0c;跨境电商直播已经成为在线零售的重要渠道&#xff0c;在大环境下&#xff0c;确保直播应用的稳定性和用户体验至关重要。 云手机支持自主ADB命令接口&#xff0c;为电商直播营销提供了技术支持&#xff0c;使得应用开发、测试、优化和运维更加高效。 什么是A…...

【计算机视觉前沿研究 热点 顶会】CVPR 2024中与域适应、分布外目标检测相关的论文

测试时间线性分布外检测 分布外&#xff08; OOD&#xff09;检测旨在通过在输入样本显著偏离训练分布&#xff08;分布中&#xff09;时触发警报来解决神经网络的过度置信度预测&#xff0c;这表明输出可能不可靠。当前的 OOD 检测方法探索各种线索来识别 OOD 数据&#xff0…...

首次由国产8K摄像机服务巴黎奥运会8K公用信号

法国巴黎时间16日上午&#xff0c;中央广播电视总台“中国红”8K转播车穿越大半个地球&#xff0c;抵达法兰西体育场&#xff0c;顺利完成与奥林匹克转播公司(OBS)的交接。 &#xff08;1&#xff09;“中国红”8K转播车 作为适合户外露天项目的“移动制作域”&#xff0c;“…...

idea怎么配置gradle多个版本

1.背景 gradle版本很多,而且很多时候版本是不兼容的,我们希望拉取下来的代码就包含已经配置好的版本,而不是去配置本机的gradle版本..... 意思就是要实现项目A可以用6.X版本 项目B可以使用7.X版本 项目C可以用9.X版本..... 2.配置方式 步骤一:项目根路径下保留一个文件夹…...

SpringCloudAlibaba-Seata2.0.0与Nacos2.2.1

一、下载 ## 下载seata wget https://github.com/apache/incubator-seata/releases/download/v2.0.0/seata-server-2.0.0.tar.gz## 解压 tar zxvf seata-server-2.0.0.tar.gz二、执行sql文件 ## 取出sql文件执行 cd /seata/script/server/db/mysql ## 找个mysql数据库执行三、…...

【编程语言】C++和C的异同点

文章目录 相同点不同点cin和scanf()结构体struct指针&#xff1a;NULL、nullptr、void* 有一段时间没有发博客了&#xff0c;从笔记里摘录一些发两篇。 相同点 C有很多从C继承过来的东西&#xff0c;因此C书(《C Primer》、《C Primer Plus》)中有一些基础的东西讲的并没有C书…...

【日常记录】【插件】excel.js导出的时候给单元格设置下拉选择、数据校验等

文章目录 1. 代码基本结构2. 导出的excel 某单元格的值设置为下拉选择3. 如何把下拉选择项设置为动态4. 单元格设置校验、提示5. 在WPS上的设置 1. 代码基本结构 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><…...

分布式 I/O 系统Modbus TCP 耦合器BL200

BL200 耦合器是一个数据采集和控制系统&#xff0c;基于强大的 32 位微处理器设计&#xff0c;采用 Linux 操作系统&#xff0c;可以快速接入现场 PLC、SCADA 以及 ERP 系统&#xff0c; 内置逻辑控制、边缘计算应用&#xff0c;支持标准 Modbus TCP 服务器通讯&#xff0c;以太…...

人工智能导论-机器学习

机器学习概述 概述 本章主要介绍的机器学习的概念、发展历程、发展趋势、相关应用&#xff0c;着重拓展机监督学习和无监督学习的相关知识。 重点&#xff1a;机器学习的定义和应用&#xff1b; 难点&#xff1a;机器学习算法及分类。 机器学习 - 重要性 MachineLeaning出…...

计算机网络——网络层(路由选择协议、路由器工作原理、IP多播、虚拟专用网和网络地址转换)

目录 路由选择协议 因特网的路由选择协议特点 路由信息协议RIP RIP衡量目的网络距离 RIP选择路由器的方式 RIP具有以下三个重要特点 RIP的基本工作流程 RIP的距离向量算法 ​编辑 ​编辑 RIP存在的问题——“坏消息传播得慢” RIP的封装 开放最短路径优先协议OSPF…...

对接企业微信API自建应用配置企业可信IP

前言 为了实现系统调用团队会议功能&#xff0c;组织发起企业微信会议&#xff0c;于是需要和企业微信做API对接。对接过程很难受&#xff0c;文档不清晰、没有SDK、没有技术支持甚至文档报文和实际接口报文都不匹配&#xff0c;只能说企业微信的API是从业以来见过的最难用的AP…...

Windows右键新建Markdown文件类型配置 | Typora | VSCode

&#x1f64b;大家好&#xff01;我是毛毛张! &#x1f308;个人首页&#xff1a; 神马都会亿点点的毛毛张 今天毛毛张分享的是如何在右键的新建菜单中添加新建MarkdownFile文件&#xff0c;这是毛毛张分享的关于Typora软件的相关知识的第三期 文章目录 1.前言&#x1f3dd;…...

PyTorch构建一个肺部CT图像分类模型来分辨肺癌

当你有5万个标注的肺部CT DICOM图像数据&#xff0c;并且希望使用PyTorch构建一个肺部CT图像分类模型来分辨肺癌&#xff0c;以下是详细的步骤和示例代码&#xff1a; 数据准备 首先&#xff0c;确保你的数据集被正确分为训练集、验证集和测试集&#xff0c;并且每个图像都有相…...

MySQL简介及数据库

mysql简介 mysql是一个轻量级关系型数据库管理系统&#xff0c;具有体积小&#xff0c;速度快&#xff0c;开源的优点 sql是一种结构化查询语言(Structured Query Language)&#xff0c;专门用来管理和处理关系型数据库的标准化编程语言&#xff0c;mysql实现了SQL标准&#xf…...

服务器基础1

服务器基础复习01 1.环境部署 系统&#xff1a;华为欧拉系统 网络简单配置nmtui 因为华为欧拉系统密码需要复杂度 所以我们可以进入后更改密码 echo 123 | passwd --stdin root也可以 echo "root:123" | chpasswd2.关闭防火墙&#xff0c;禁用SElinux 首先先关…...

<数据集>光伏板缺陷检测数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;2400张 标注数量(xml文件个数)&#xff1a;2400 标注数量(txt文件个数)&#xff1a;2400 标注类别数&#xff1a;4 标注类别名称&#xff1a;[Crack,Grid,Spot] 序号类别名称图片数框数1Crack8688922Grid8248843S…...

leetcode 513. 找树左下角的值

给定一个二叉树的 根节点 root&#xff0c;请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 示例 1: 输入: root [2,1,3] 输出: 1示例 2: 输入: [1,2,3,4,null,5,6,null,null,7] 输出: 7提示: 二叉树的节点个数的范围是 [1,104]-231 < Node.val &…...

C++并发编程实战学习笔记

一、C的并发&#xff1a; 多进程并发&#xff1a; 将应用程序分为多个独立的进程&#xff0c;它们在同一时刻运行&#xff0c;就像同 时进行网页浏览和文字处理一样。独立的进程可以通过进程间常规的通信渠道传递讯息(信号、套接字、文件、管道等等)。不过&#xff0c;这种进程…...

【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【25】【分布式事务】

持续学习&持续更新中… 守破离 【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【25】【分布式事务】 本地事务事务的基本性质事务的隔离级别&#xff08;下面四个越往下&#xff0c;隔离级 别越高&#xff0c;并发能力越差&#xff09;事务的传播行为&#xff08;是否…...

HC05主从一体蓝牙模块的裸机使用——单片机<-->蓝牙模块

HC-05是一种常用的蓝牙模块&#xff0c;具有低功耗、低成本、易于使用的特点。它可以实现与其他蓝牙设备&#xff08;如手机、电脑等&#xff09;进行无线通信。HC-05蓝牙模块具有串口通信接口&#xff0c;可以通过串口与主控制器&#xff08;如Arduino、Raspberry Pi等&#x…...

“点点通“餐饮点餐小程序-计算机毕业设计源码11264

"点点通"餐饮点餐小程序 XXX专业XX级XX班&#xff1a;XXX 指导教师&#xff1a;XXX 摘要 随着中国经济的飞速增长&#xff0c;消费者的智能化水平不断提高&#xff0c;许多智能手机和相关的软件正在得到更多的关注和支持。其中&#xff0c;微信的餐饮点餐小程序更…...

C#知识|账号管理系统-账号信息管理界面[1]:账号分类选择框、Panel面板设置

哈喽,你好啊,我是雷工! 前一节实现了多条件查询后端代码的编写, 接下来继续学习账号信息管理界面的功能编写,本节主要记录账号分类选择框和Panel的设置, 以下为学习笔记。 01 功能说明 本节实现以下功能: ①:账号分类选择框只能选择,无法自由输入; ②:账号分类框默认…...

Meta即将推出4000亿的Llama 3 超级AI模型,或将改写大语言模型竞争格局!|TodayAI

2024年4月&#xff0c;科技巨头Meta发布了其最新的AI大型语言模型——Llama 3&#xff0c;该模型基于一个至少比前代产品Llama 2大七倍的数据集&#xff0c;展现出前所未有的性能。在最初发布时&#xff0c;Llama 3提供了8B和70B两种参数规模的版本&#xff0c;并迅速超越了Goo…...

数据挖掘新技能:Python爬虫编程指南

Python爬虫的优势 Python之所以成为数据爬取的首选语言&#xff0c;主要得益于其丰富的库和框架支持。以下是一些常用的库&#xff1a; Requests&#xff1a;用于发送HTTP请求&#xff0c;简单易用&#xff0c;是Python爬虫的基础库。BeautifulSoup&#xff1a;用于解析HTML文…...

object-C 解答算法:移动零(leetCode-283)

移动零(leetCode-283) 题目如下图:(也可以到leetCode上看完整题目,题号283) 解题思路: 本质就是把非0的元素往前移动,接下来要考虑的是怎么移动,每次移动多少? 这里需要用到双指针,i 记录每次遍历的元素值, j 记录“非0元素值”需要移动到的位置; 当所有“非0元素值”都移…...

靖江美食元宇宙

关于“靖江美食元宇宙”的具体信息&#xff0c;搜索结果中并未提供直接相关的详细描述。不过&#xff0c;搜索结果显示了有关元宇宙在食品领域的应用和探索&#xff0c;例如食品元宇宙的概念、不同品牌尝试进入元宇宙市场的例子等。这些信息表明&#xff0c;元宇宙技术正在被用…...

模板方法设计模式

模板方法设计模式: 模板方法设计模式&#xff1a;解决方法中存在重复代码的问题。 模板方法设计模式的写法&#xff1a; 1、定义一个抽象类 2、在里面定义2个方法 ​ 一个是模板方法&#xff1a;把相同代码放里面去 ​ 一个是抽象方法&#xff1a;具体实现交给子类完成 建议使用…...

对象存储解决方案:高性能分布式对象存储系统MinIO

文章目录 引言I 自动化数据管理界面1.1 图形用户界面:GUI1.2 命令行界面:MinIO CLI1.3 应用程序编程接口:MinIO APIII 部署集成2.1 建议使用RPM或DEB安装方式2.2 创建环境变量文件2.3 启动MinIO服务2.4 将NGINX用作反向代理,配置负载。III 基础概念3.1 为什么是对象存储?3…...

erp系统是怎样的一个软件/优化关键词排名

1. 定义 Lambda 表达式&#xff0c;也可称为闭包&#xff0c;它是推动 Java 8 发布的最重要新特性。 Lambda 允许把函数作为一个方法的参数&#xff08;函数作为参数传递进方法中&#xff09;。 使用 Lambda 表达式可以使代码变的更加简洁紧凑。 1.1 通用定义 lambda 表达…...

网站制作价格东莞/b2b外链代发

来源&#xff1a;Talkwithtrend ID&#xff1a;Talkwithtrend 在此收集的支付宝的系统架构图包含&#xff1a;清算、客服、处理、资金、财务等等&#xff0c;由于资料年限限制&#xff0c;仅供参考&#xff0c;但基本架构相信还是变化不大的。作为支付行业的龙头&#xff0c;…...

家装设计师怎么学/文章优化关键词排名

Matlab强大的函数库涉及各个领域 matlab各个领域的函数库&#xff1a;https://ww2.mathworks.cn/matlabcentral/fileexchange/ 发现向量arrayA中最小的Num个数 function [ minFlags ] findMinFlag( arrayA,num ) %FINDMINFLAG Summary of this function goes here % Deta…...

六安市住房和城乡建设委员会网站/爱站关键词挖掘工具

? Vue GSAP 实战在学习过基础 SVG 动画原理后&#xff0c;如果结合我们熟悉的技术栈使用岂不是更爽。GSAP 提供了 npm 安装包&#xff0c;下面我们来在 Vue 项目中集成 GSAP。安装 GSAPyarn add gsap -S// ornpm i gsap -S在 Vue 组件中使用 GSAP假设我们让一个矩形旋转 240 …...

南京企业做网站/营销100个引流方案

第二题生日蜡烛(结果填空)某君从某年开始每年都举办一次生日party&#xff0c;并且每次都要吹熄与年龄相同根数的蜡烛。现在算起来&#xff0c;他一共吹熄了236根蜡烛。请问&#xff0c;他从多少岁开始过生日party的&#xff1f;请填写他开始过生日party的年龄数。注意&#xf…...

wordpress 文章索引/无锡seo公司

这是一个允许您流式传输子流程输出的解决方案。事后使用相同的模板静态加载它(假设您的子进程将其自己的输出记录到文件中;如果没有&#xff0c;则将进程输出记录到日志文件中留给读者练习)from flask import Response, escapefrom yourapp import appfrom subprocess import P…...