多进程编程:原理、技术与应用


title: 多进程编程:原理、技术与应用
date: 2024/4/26 12:14:47
updated: 2024/4/26 12:14:47
categories:

  • 后端开发

tags:

  • 多进程
  • 并发编程
  • 网络服务
  • 分布式系统
  • 任务处理
  • 进程池
  • 线程对比

在这里插入图片描述

第一章:进程与线程

进程与线程的概念及区别:
  • 进程:进程是操作系统中的一个程序执行实例。每个进程都有自己独立的内存空间,包括代码、数据、堆栈等。进程之间是相互独立的,彼此不会直接影响。进程是系统进行资源分配和调度的基本单位。

  • 线程:线程是进程中的一个执行单元,一个进程可以包含多个线程。同一进程中的多个线程共享相同的内存空间,包括代码段、数据段等。线程之间可以直接进行通信,共享数据。线程是 CPU 调度的基本单位。

  • 区别

    • 进程拥有独立的内存空间,而线程共享相同的内存空间。
    • 进程之间的切换开销比线程大,因为进程切换需要切换内存空间,而线程切换只需切换上下文。
    • 进程之间通信需要额外的 IPC(进程间通信),而线程之间可以直接共享数据。
    • 进程更安全稳定,一个进程崩溃不会影响其他进程,而线程共享内存,一个线程崩溃可能导致整个进程崩溃。
进程控制块(PCB)和线程控制块(TCB):
  • 进程控制块(PCB) :PCB是操作系统中用于管理进程的数据结构。每个进程都有一个对应的 PCB,用于存储进程的状态信息、程序计数器、内存指针、文件描述符等。操作系统通过 PCB 来管理和调度进程。
  • 线程控制块(TCB) :TCB是操作系统中用于管理线程的数据结构。每个线程也有一个对应的 TCB,用于存储线程的状态信息、栈指针、寄存器值等。操作系统通过 TCB 来管理和调度线程。
进程状态转换图:

进程在其生命周期中会经历不同的状态,常见的进程状态包括:

  • 创建态:进程正在被创建,分配必要的资源。
  • 就绪态:进程已经准备好运行,等待被调度执行。
  • 运行态:进程正在 CPU 上执行指令。
  • 阻塞态:进程暂时无法执行,通常是在等待某个事件发生。
  • 终止态:进程执行完毕或被终止,释放资源。

进程在不同状态之间的转换可以用进程状态转换图来表示,图中展示了进程在不同状态之间的转换关系及触发条件。操作系统根据进程状态的变化来进行进程调度和管理,确保系统资源的合理利用和进程的正常运行。

第二章:进程间通信(IPC)

IPC的基本概念和作用:
  • IPC(Inter-Process Communication) :进程间通信是指在不同进程之间传递和共享数据的机制。进程间通信允许不同的进程在运行时相互交换信息、协调操作,从而实现协作和共享资源。

  • 作用

    • 实现进程间数据传输和共享。
    • 实现进程间同步和互斥,确保进程之间的顺序和数据一致性。
    • 提高系统的灵活性和效率,允许不同进程之间独立运行并协同工作。
管道(Pipe):
  • 匿名管道:匿名管道是一种单向通信机制,用于在父子进程或兄弟进程之间传递数据。匿名管道只能用于具有亲缘关系的进程间通信,数据只能单向流动。
  • 命名管道:命名管道是一种特殊类型的文件,允许无关的进程之间进行通信。命名管道可以通过文件系统路径访问,不受进程亲缘关系限制。
信号量(Semaphore):
  • 二进制信号量:二进制信号量只有两个取值(0和1),用于实现进程间的互斥和同步。通常用于解决生产者-消费者问题等场景。
  • 计数信号量:计数信号量可以取多个取值,用于控制多个进程对共享资源的访问。计数信号量可以用于控制资源的数量和访问权限。
消息队列(Message Queue):
  • 消息队列:消息队列是一种进程间通信的方式,允许进程通过发送和接收消息来进行通信。消息队列可以实现不同进程之间的异步通信,提高系统的灵活性和效率。
共享内存(Shared Memory):
  • 共享内存:共享内存允许多个进程共享同一块内存区域,从而实现高效的数据共享。共享内存是最快的 IPC 方式,但需要进程之间进行同步和互斥控制,以避免数据一致性问题。
套接字(Socket):
  • 套接字:套接字是一种通用的进程间通信机制,可用于不同主机之间的通信。套接字可以实现进程间的网络通信,包括 TCP 和 UDP 通信。套接字提供了一种灵活且强大的通信方式,广泛应用于网络编程和分布式系统中。

第二部分:进程同步与通信

第三章:进程同步
同步与异步:
  • 同步:同步是指在进行某个操作时,必须等待前一个操作完成后才能进行下一个操作。同步操作可以保证数据的一致性和顺序性,但可能会造成程序的阻塞。
  • 异步:异步是指不需要等待前一个操作完成,可以同时进行多个操作。异步操作可以提高程序的响应速度和并发性,但需要额外的机制来处理数据的一致性和顺序性。
临界区(Critical Section):
  • 临界区:临界区是指一段代码或代码块,同一时刻只允许一个进程访问。进程在进入临界区前需要获取同步对象(如互斥量、信号量),以确保临界区的互斥访问。
互斥量(Mutex):
  • 互斥量:互斥量是一种用于实现进程间互斥访问的同步对象。只有拥有互斥量的进程才能进入临界区,其他进程需要等待。互斥量通常用于保护临界区,防止多个进程同时访问共享资源。
信号量(Semaphore):
  • 信号量:信号量是一种用于控制多个进程对共享资源访问的同步对象。信号量可以实现进程间的同步和互斥,允许多个进程同时访问共享资源,但需要控制访问的数量和顺序。
事件(Event):
  • 事件:事件是一种用于进程间通信和同步的同步对象。事件可以有信号和无信号两种状态,用于通知进程事件的发生。事件可以用于进程间的通知、等待和唤醒操作,实现进程的同步和协作。
第四章:进程通信模式
单工通信:
  • 单工通信:单工通信是指数据只能单向传输的通信模式。在单工通信中,通信的一方只能发送数据,而另一方只能接收数据。这种通信模式类似于广播,但通信的双方不对等,不能同时进行数据传输和接收。
半双工通信:
  • 半双工通信:半双工通信是指数据可以双向传输但不能同时进行的通信模式。在半双工通信中,通信的双方可以交替地发送和接收数据,但不能同时进行发送和接收。这种通信模式类似于对讲机,通信的双方可以轮流发言。
全双工通信:
  • 全双工通信:全双工通信是指数据可以双向传输且可以同时进行的通信模式。在全双工通信中,通信的双方可以同时进行发送和接收数据,实现实时的双向通信。这种通信模式类似于电话通话,通信的双方可以同时交流信息。
客户端-服务器通信模式:
  • 客户端-服务器通信模式:客户端-服务器通信模式是一种常见的网络通信模式,用于实现客户端和服务器之间的数据交互。在这种通信模式中,客户端向服务器发送请求,服务器处理请求并返回相应的结果给客户端。这种通信模式可以实现双向的数据传输和交互,通常用于构建分布式系统和网络应用。

第三部分:高级主题与实践应用

第五章:进程池与并发控制
进程池的概念和设计:
  • 进程池:进程池是一种管理和复用进程的技术,用于提高系统的性能和资源利用率。进程池在系统启动时创建一定数量的进程,并将它们保存在一个池中,当需要处理任务时,可以从池中获取空闲的进程来执行任务,执行完任务后再将进程放回池中等待下一个任务。这种复用进程的方式减少了频繁创建和销毁进程的开销,提高了系统的效率。
并发控制的算法与技术:
  • 并发控制:并发控制是指在多进程或多线程环境下管理和协调进程或线程之间的并发操作,以确保数据的一致性和正确性。常见的并发控制算法和技术包括锁机制、信号量、条件变量、读写锁、原子操作等。这些技术可以用于控制进程或线程的访问顺序、共享资源的争用情况,避免数据竞争和死锁等并发问题。
高级进程池应用场景:
  • 高级进程池应用场景

    1. Web 服务器:在Web服务器中使用进程池可以提高并发请求的处理能力,减少响应时间,提升用户体验。
    2. 数据库连接池:数据库连接池是一种特殊的进程池,用于管理数据库连接,提高数据库访问的效率和性能。
    3. 计算密集型任务:对于需要大量计算的任务,可以使用进程池来并行执行任务,加快任务完成的速度。
    4. 爬虫程序:爬虫程序通常需要并发地抓取网页数据,使用进程池可以提高爬虫的效率和速度。
    5. 消息队列消费者:消息队列中的消费者可以使用进程池来并发地处理消息,实现高效的消息处理系统。

这些高级进程池应用场景可以充分利用进程池的优势,提高系统的性能和并发处理能力。

第六章:多进程调试与性能优化
多进程调试工具介绍:
  • 多进程调试工具:多进程调试工具是用于调试多进程程序的工具,可以帮助开发者定位并修复多进程程序中的问题。常见的多进程调试工具包括GDB、Strace、Ltrace等。这些工具可以提供进程的运行状态、调用栈、内存使用情况等信息,帮助开发者理解程序的运行逻辑和问题所在。
性能分析与优化策略:
  • 性能分析与优化策略:性能分析与优化是指通过分析程序的运行状况,找出性能瓶颈和问题,优化程序的资源使用和执行效率。常见的性能分析与优化策略包括性能监测、内存分析、CPU分析、I/O分析等。这些策略可以帮助开发者了解程序的性能状况,找到性能优化的方向和方法。
实战案例分析:
  • 实战案例分析:通过实战案例分析,可以更好地理解多进程调试和性能优化的方法和技巧。例如,可以通过分析一个多进程Web服务器的性能问题,找出瓶颈所在,采用适当的优化策略,提高服务器的性能和并发处理能力。这样的实战案例分析可以帮助开发者更好地理解多进程程序的运行机制和优化方法。
代码示例:

以下是一个使用GDB调试多进程程序的示例:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>int main() {pid_t pid = fork();if (pid == 0) { // 子进程代码for (int i = 0; i < 1000000; i++) {printf("%d\n", i);}return 0;} else {// 父进程代码pid_t status;waitpid(pid, &status, 0);if (WIFEXITED(status)) {printf("子进程退出,状态码: %d\n", WEXITSTATUS(status));} else if (WIFSIGNALED(status)) {printf("子进程被信号中断,信号号: %d\n", WTERMSIG(status));} else {printf("子进程未正常结束\n");}}return 0;
}

在这个例子中,父进程创建了一个子进程,子进程执行一个耗时的操作。父进程通过 waitpid 等待子进程结束,并根据返回的状态码判断子进程的退出情况。

要使用 GDB 进行调试,你需要编译并运行程序,然后在GDB中附加到进程:

gdb your_program
(gdb) run

在GDB中,你可以设置断点、查看变量值、单步执行等,帮助你定位和解决问题。

总结:

多进程调试和性能优化是复杂而重要的任务,需要开发者具备一定的理论知识和实践经验。通过学习和实践,你可以有效地提高程序的稳定性和性能。如果你在实际开发中遇到具体问题,记得提供详细的问题描述,我会更具体地帮助你解决问题。

第七章:多进程编程实战

多进程编程在网络服务器开发、分布式系统设计和多进程并发任务处理中有着广泛的应用。在这一章中,我们将介绍多进程编程在这些领域的应用,并通过实例代码展示如何使用多进程编程技术实现这些应用。

7.1 网络服务器开发

网络服务器是一个典型的多进程编程应用。在网络服务器开发中,我们通常使用多进程技术来实现并发处理多个客户端请求,从而提高服务器的性能和吞吐量。下面是一个简单的网络服务器示例代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>#define PORT 8080int main() {int server_fd, new_socket;struct sockaddr_in address;int opt = 1;int addrlen = sizeof(address);// 创建socketif ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {perror("socket failed");exit(EXIT_FAILURE);}// 设置socket选项if (setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR | SO_REUSEPORT, &opt, sizeof(opt))) {perror("setsockopt");exit(EXIT_FAILURE);}address.sin_family = AF_INET;address.sin_addr.s_addr = INADDR_ANY;address.sin_port = htons(PORT);// 绑定socketif (bind(server_fd, (struct sockaddr *)&address, sizeof(address)) < 0) {perror("bind failed");exit(EXIT_FAILURE);}// 监听socketif (listen(server_fd, 3) < 0) {perror("listen");exit(EXIT_FAILURE);}while (1) {// 接收连接if ((new_socket = accept(server_fd, (struct sockaddr *)&address, (socklen_t*)&addrlen)) < 0) {perror("accept");exit(EXIT_FAILURE);}// 创建子进程处理连接if (fork() == 0) {char buffer[1024] = {0};int valread;valread = read(new_socket, buffer, 1024);printf("Client message: %s\n", buffer);send(new_socket, "Server received your message", strlen("Server received your message"), 0);close(new_socket);exit(0);} else {close(new_socket);}}return 0;
}

在上面的代码中,我们创建了一个简单的网络服务器,通过socket、bind、listen和accept函数来建立服务器,然后使用fork函数创建子进程来处理客户端的连接请求。每个子进程负责处理一个客户端连接,接收客户端发送的消息并回复消息,然后关闭连接。

7.2 分布式系统设计

在分布式系统设计中,多进程编程可以用来实现分布式系统中的各个节点之间的通信和协作。通过多进程技术,可以实现分布式系统中的任务分发、数据同步、负载均衡等功能。下面是一个简单的分布式系统设计示例代码:

from multiprocessing import Process, Queuedef worker(queue):while True:task = queue.get()if task == 'exit':breakprint(f"Processing task: {task}")if __name__ == '__main__':tasks = ['task1', 'task2', 'task3']queue = Queue()processes = []for task in tasks:queue.put(task)for _ in range(3):process = Process(target=worker, args=(queue,))process.start()processes.append(process)for process in processes:process.join()for _ in range(3):queue.put('exit')

在上面的Python代码中,我们通过multiprocessing模块创建了一个简单的分布式系统,其中包括一个任务队列和多个工作进程。每个工作进程从任务队列中获取任务并处理,直到接收到退出信号。通过这种方式,可以实现分布式系统中任务的并发处理。

7.3 多进程并发任务处理

一个覆盖广泛主题工具的高效在线平台

多进程并发任务处理是指通过多个进程同时处理多个任务,以提高系统的效率和性能。在这种场景下,每个进程负责处理一个或多个任务,通过并发执行来加速任务处理过程。下面是一个简单的多进程并发任务处理示例代码:

from multiprocessing import Pooldef process_task(task):print(f"Processing task: {task}")if __name__ == '__main__':tasks = ['task1', 'task2', 'task3']with Pool(processes=3) as pool:pool.map(process_task, tasks)

在上面的Python代码中,我们使用multiprocessing模块的Pool类来创建一个进程池,然后通过map函数将多个任务分发给进程池中的进程并发处理。这样可以有效利用多核处理器的优势,加速任务处理过程。

通过以上示例,我们可以看到多进程编程在网络服务器开发、分布式系统设计和多进程并发任务处理中的应用,能够提高系统的并发能力和性能。希望这些示例能帮助您更好地理解多进程编程在实际应用中的作用和实现方式。

import multiprocessingdef worker(num):"""thread worker function"""print('Worker:', num)returnif __name__ == '__main__':jobs = []for i in range(5):p = multiprocessing.Process(target=worker, args=(i,))jobs.append(p)p.start()

在上面的Python代码中,我们创建了一个简单的多进程程序,通过multiprocessing模块创建了5个进程,并将worker函数作为每个进程的目标函数。每个进程负责执行worker函数,并传入一个唯一的数字作为参数。通过这种方式,我们可以实现多进程并发执行任务。

7.4 多进程与多线程

在实际应用中,多进程与多线程都可以实现并发执行任务,但它们之间有一些区别和优缺点。

多进程的优点是:

  • 每个进程都有自己的地址空间,可以避免变量共享导致的数据一致性问题。
  • 每个进程都可以利用多核处理器的优势,提高系统的并发能力和性能。

多进程的缺点是:

  • 每个进程都需要占用系统资源,包括内存和CPU时间,因此进程的数量受到系统资源的限制。
  • 进程之间的通信和同步较为复杂,需要使用IPC(Inter-Process Communication)机制,如管道、信号、共享内存等。

多线程的优点是:

  • 线程比进程更加轻量级,可以创建大量的线程,不会占用太多系统资源。
  • 线程之间可以共享数据,因此可以方便地实现数据共享和通信。

多线程的缺点是:

  • 线程之间共享地址空间,因此可能导致变量共享导致的数据一致性问题。
  • 线程的并发执行可能导致线程安全问题

Python中的全局解释器锁(GIL)限制了多线程并发执行时只有一个线程可以执行Python字节码,因此多线程无法充分利用多核处理器的优势。

在选择多进程还是多线程时,可以根据具体的应用场景和需求来决定:

  • 如果任务是CPU密集型的,即需要大量的计算和处理,推荐使用多进程,可以充分利用多核处理器的优势。
  • 如果任务是I/O密集型的,即需要大量的I/O操作(如文件读写、网络请求等),推荐使用多线程,可以避免I/O阻塞,提高程序的响应速度。

总之,多进程和多线程都是实现并发编程的有效方式,开发者可以根据具体需求选择合适的方式来实现并发任务。在实际应用中,也可以将多进程和多线程结合起来使用,充分发挥它们各自的优势,实现高效的并发编程。

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

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

相关文章

gitcode 上传文件报错文件太大has exceeded the upper limited size

报错 remote: Start Git Hooks Checking Error: Deny by project hooks setting ‘default’ has exceeded the upper limited size (10 MB) in commit 当前有效的解决方案 项目设置->提交设置->勾选管理员不受规则限制->提交 重新push&#xff0c;提交成功

Vitis HLS 学习笔记--IDE软件高效操作指引

目录 1. 简介 2. 实用软件操作 2.1 C/RTL Cosimulation 选项 2.2 Do not show this dialog again 2.3 New Solution 2.4 对比 Solution 2.5 以命令行方式运行&#xff08;windows&#xff09; 2.6 文本缩放快捷键 2.7 查看和修改快捷键 2.8 将Vitis HLS RTL 导入 Viv…

Oracle集群ORA-03113:end-of-file on communication channel

一、问题场景描述 今天Oracle集群要更新各数据库的数据&#xff0c;折腾的启动不了了&#xff1a; --》数据量比较大&#xff0c;数据泵方式导出的dmp文件 准备导入集群 --》由于之前的生产数据库数据比较少&#xff0c;需要增大表空间。 --》于是在sqlplus命令窗口&#xff0c…

【JavaWeb】Day51.Mybatis动态SQL(一)

什么是动态SQL 在页面原型中&#xff0c;列表上方的条件是动态的&#xff0c;是可以不传递的&#xff0c;也可以只传递其中的1个或者2个或者全部。 而在我们刚才编写的SQL语句中&#xff0c;我们会看到&#xff0c;我们将三个条件直接写死了。 如果页面只传递了参数姓名name 字…

进程地址空间 【Linux】

文章目录 进程地址空间 进程地址空间 进程地址空间&#xff0c;本质是一个描述进程可视范围的大小&#xff0c; 地址空间内一定要存在各种区域划分&#xff0c;对线性地址进行start&#xff0c;和end即可 在每一个区的_start 到_end 范围内&#xff0c;这段连续的空间中&…

深入探索计算机视觉:高级主题与前沿应用的全面解析

引言 计算机视觉&#xff0c;作为人工智能领域的一个重要分支&#xff0c;旨在让计算机能够“看”懂世界&#xff0c;理解和解释视觉场景。随着深度学习技术的迅猛发展&#xff0c;计算机视觉已经在许多领域取得了显著的进展&#xff0c;如自动驾驶、安防监控、医疗诊断等。在…

JDBC查询大数据时怎么防止内存溢出-流式查询

文章目录 1.前言2.流式查询介绍3.使用流式查询3.1不开启流式查询的内存占用情况3.2开启流式查询的内存占用情况 4.开启流式查询的注意点 1.前言 在使用 JDBC 查询大数据时&#xff0c;由于 JDBC 默认将整个结果集加载到内存中&#xff0c;当查询结果集过大时&#xff0c;很容易…

刷机维修进阶教程----小米6 6x 5x机型修复基带 改写参数 改写串码实例步骤操作解析

在于众多工作室 业务接洽中有很多需要过新机的业务需求。那么大多都在机型参数和型号上面有关联。众所周知,改写机型参数为不允许的行为。操作只为解惑参数的一些常识,修复合规参数和修复手机系统为目的,请遵守国安家法律法规,今天将详细通过实例演示来解析小米6 6x 5x这些…

Fast-DetectGPT 无需训练的快速文本检测

本文提出了一种新的文本检测方法 ——Fast-DetectGPT&#xff0c;无需训练&#xff0c;直接使用开源小语言模型检测各种大语言模型&#xff0c;如GPT等生成的文本内容。 Fast-DetectGPT 将检测速度提高了 340 倍&#xff0c;将检测准确率相对提升了 75%&#xff0c;超过商用系…

【中级软件设计师】上午题12-软件工程(1):软件工程模型、敏捷方法、软件需求、系统设计

上午题12-软件工程&#xff08;1&#xff09; 1 软件过程1.1 CMM 能力成熟度模型1.1 CMMI (建议直接看思维导图&#xff09; 2 软件过程模型2.1 瀑布模型2.2 增量模型2.3 演化模型2.3.1 原型模型2.3.2 螺旋模型 2.5 喷泉模型 3 统一过程&#xff08;UP&#xff09;模型4 敏捷方…

【python】利用 GridSearchCV 和 SVM 进行学生成绩预测

在机器学习领域&#xff0c;寻找最优模型参数是一个重要的步骤&#xff0c;它直接影响模型的泛化能力和预测准确性。本文将通过一个具体案例介绍如何使用支持向量机&#xff08;SVM&#xff09;和网格搜索&#xff08;GridSearchCV&#xff09;来预测学生的成绩&#xff0c;并通…

可审批可审计追溯的单网络导出文件方案,了解一下

在物理隔离状态下&#xff0c;单网络导出文件是一个重要的安全需求&#xff0c;特别是在处理敏感数据时。在这种环境下&#xff0c;数据导出需要采取特殊的安全措施&#xff0c;以确保数据传输的安全性和合规性。需要考虑以下因素&#xff1a; 安全性&#xff1a;确保传输过程加…

筛选日志并生成序列化文件

1.在idea中创建项目 selectData. 2.添加依赖&#xff0c;插件包&#xff0c;指定打包方式&#xff0c;日志文件 大家可以直接从前面项目复制。 3.本次只需要进行序列化操作&#xff0c;所以不需要Reducer模块&#xff0c;编写Mapper模块 package com.maidu.selectdata;import…

Bert基础(十八)--Bert实战:NER命名实体识别

1、命名实体识别介绍 1.1 简介 命名实体识别&#xff08;NER&#xff09;是自然语言处理&#xff08;NLP&#xff09;中的一项关键技术&#xff0c;它的目标是从文本中识别出具有特定意义或指代性强的实体&#xff0c;并对这些实体进行分类。这些实体通常包括人名、地名、组织…

极简shell制作

&#x1f30e;自定义简单shell制作 &#xff08;ps: 文末有完整代码&#xff09; 文章目录&#xff1a; 自定义简单shell制作 简单配置Linux文件 自定义Shell编写 命令行解释器       获取输入的命令       字符串分割       子进程进行进程替换 内建命令…

28.Gateway-网关过滤器

GatewayFilter是网关中提供的一种过滤器&#xff0c;可以多进入网关的请求和微服务返回的响应做处理。 GatewayFilter(当前路由过滤器&#xff0c;DefaultFilter) spring中提供了31种不同的路由过滤器工厂。 filters针对部分路由的过滤器。 default-filters针对所有路由的默认…

opencv基础篇 ——(九)图像几何变换

图像几何变换是通过对图像的几何结构进行变换来改变图像的形状、大小、方向或者透视关系。常见的图像几何变换包括缩放、旋转、平移、仿射变换和透视变换等。下面对这些几何变换进行简要介绍&#xff1a; 矩阵的转置&#xff08;transpose &#xff09;&#xff1a; 对于图像来…

微服务之SpringCloud AlibabaNacos服务注册和配置中心

一、概述 1.1注册中心原理 在微服务远程调用的过程中&#xff0c;包括两个角色&#xff1a; 服务提供者&#xff1a;提供接口供其它微服务访问&#xff0c;比如item-service 服务消费者&#xff1a;调用其它微服务提供的接口&#xff0c;比如cart-service 在大型微服务项目…

符合医药行业规范的液氮罐运输和存储温度监测解决方案

API原料药、冻干物质和人体样本必须在玻璃相中以尽可能低的温度运输和存储。专门的低温容器——干式液氮罐——可通过液氮&#xff08;LN2&#xff09;将温度保持在-196 C。由于温度极低&#xff0c;低温容器的温度数据监测不仅具有挑战性&#xff0c;而且还需要更复杂的过程&a…

Linux下的常用基本指令

基本指令 前言ls 指令语法功能常用选项举例注意要点关于拼接关于 -a关于文件ls与/的联用ls与根目录ls与任意文件夹ls与常用选项与路径 ls -d与ls -ldls与ll pwd命令语法功能常用选项注意要点window与Linux文件路径的区别家目录 cd 指令语法功能举例注意要点cd路径.. .相对路径与…