文章目录

    • OpenFOAM里区域分解后polymesh文件解释
      • 🔹 1. What is `polyMesh`?
      • 🔹 2. Domain Decomposition Overview
      • 🔹 3. How `decomposePar` Works with `polyMesh`
        • Key Output Files in `processorX/polyMesh/`:
      • 🔹 4. Types of Decomposition
      • 🔹 5. Handling Processor Boundaries
      • 🔹 6. Communication & Field Reconstruction
      • 🔹 7. Summary: Role of `polyMesh` in Domain Decomposition
      • 🔹 8. Tips
      • ✅ Conclusion
    • 进程边界底层通信实现
      • 一、并行分区与 processor patch
      • 二、场在并行环境中的存储
      • 三、进程间数据交换机制
        • 1. **显式通信:`send` / `receive`**
        • 2. **非阻塞通信(推荐)**
        • 3. **OpenFOAM 的通信封装**
      • 四、典型应用场景:梯度计算
      • 五、数据一致性与更新时机
      • 六、优化:面映射与共享点处理
      • 七、代码示例:手动触发通信
      • 总结
      • 参考资料
    • OpenFOAM lduMatrix::Amul()核心参数说明
      • 1. `interfaceBouCoeffs`
        • 类型:
        • 含义:
        • 举例:
        • 公式示意:
      • 2. `interfaceIntCoeffs`
        • 类型:
        • 含义:
        • 公式示意:
        • 物理意义:
      • 3. `interfaces`
        • 类型:
        • 含义:
        • 使用方式:
      • 三者协同工作流程(在 `lduMatrix::Amul` 中)
      • 总结表格
      • 应用场景举例
      • 参考源码
      • 补充说明

OpenFOAM里区域分解后polymesh文件解释

In OpenFOAM, domain decomposition is a crucial technique used in parallel computing to divide a large computational domain into smaller subdomains, each handled by a separate processor. This enables efficient simulation of complex fluid dynamics problems by distributing the computational load across multiple cores or machines.

One of the key components involved in this process is the polyMesh directory and its associated files, which define the mesh structure. Understanding how domain decomposition works in OpenFOAM requires knowledge of how the mesh is split and how the polyMesh files are used during this process.


🔹 1. What is polyMesh?

The polyMesh directory (located in constant/polyMesh/) contains all the files that define the unstructured polyhedral mesh used by OpenFOAM. These files include:

  • points – Coordinates of all mesh vertices.
  • faces – List of faces, each defined by a list of point indices.
  • owner – For each face, the index of the cell that owns it.
  • neighbour – For internal faces, the index of the neighboring cell.
  • cells – List of cells, each defined by a list of face indices.
  • boundary – Definition of boundary patches (name, type, startFace, nFaces, etc.).

This structure is used to represent arbitrary polyhedral meshes and is central to OpenFOAM’s finite volume method.


🔹 2. Domain Decomposition Overview

When running a simulation in parallel, OpenFOAM uses decomposed versions of the mesh and field data. The process involves:

  1. Decompose the domain into subdomains.
  2. Distribute each subdomain to a processor.
  3. Solve equations on each subdomain in parallel.
  4. Communicate data across processor boundaries as needed.

The tool used to split the mesh is decomposePar, which reads the original polyMesh and creates separate mesh data for each processor.


🔹 3. How decomposePar Works with polyMesh

When you run decomposePar, it:

  • Reads the global mesh from constant/polyMesh.
  • Splits the mesh into N subdomains (based on the number of processors).
  • Creates a processorX/ directory for each subdomain (where X = 0 to N-1).
  • Each processorX/ directory contains its own polyMesh folder with modified mesh files.
Key Output Files in processorX/polyMesh/:
  • points, faces, cells, owner, neighbour, boundary – Subset of the original mesh.
  • Additional files:
    • cellProcAddressing – Mapping from local cell indices to global cell indices.
    • faceProcAddressing – Mapping for faces.
    • pointProcAddressing – Mapping for points.

These addressing files are essential for reconstructing the solution after the simulation (reconstructPar) and for mapping field values between global and local numbering.


🔹 4. Types of Decomposition

OpenFOAM supports several decomposition methods, defined in system/decomposeParDict:

  • simple: Splits the domain geometrically (e.g., Cartesian slicing).
  • hierarchical: Successively divides domain along x, y, z.
  • scotch or metis: Graph-based partitioning minimizing communication.
  • manual: User-defined assignment of cells to processors.

Example decomposeParDict:

numberOfSubdomains 4;method          scotch;scotchCoeffs
{processorWeights (1 1 1 1);
}

🔹 5. Handling Processor Boundaries

After decomposition, new processor-processor interfaces are created where subdomains meet. These are treated as special boundary types:

  • processor, processorCyclic, or cyclicAMIPolyPatch (for non-conformal interfaces).
  • Each processor stores:
    • Internal faces (within subdomain).
    • Boundary faces on physical boundaries.
    • Processor boundary faces – adjacent to another processor’s subdomain.

Communication between processors occurs across these processor patches during the solution process using MPI.


🔹 6. Communication & Field Reconstruction

During simulation:

  • Field values on processor boundaries are exchanged via MPI.
  • The fvMesh class handles communication using the addressing arrays.

After simulation:

  • reconstructPar uses the cellProcAddressing etc. to map solution fields back to the global mesh.

🔹 7. Summary: Role of polyMesh in Domain Decomposition

StepRole of polyMesh
1. Original Meshconstant/polyMesh/ holds the full domain mesh.
2. DecompositiondecomposePar splits mesh into processorX/polyMesh/.
3. Parallel RunEach processor uses its local polyMesh + addressing files.
4. CommunicationProcessor patches in boundary file define MPI interfaces.
5. ReconstructionAddressing files map local → global for post-processing.

🔹 8. Tips

  • Always run decomposePar before mpirun for parallel runs.
  • Use scotch or metis for better load balancing on complex geometries.
  • Check decomposition quality with paraFoam -builtin -case . and visualize processor patches.
  • Clean up with decomposePar -copyZero if initial conditions are in 0/.

✅ Conclusion

The polyMesh files are the foundation of mesh representation in OpenFOAM. During domain decomposition, these files are split and augmented with processor-specific addressing to enable efficient parallel computation. Understanding how polyMesh evolves during decomposition is key to mastering parallel simulations in OpenFOAM.

Let me know if you’d like a visual example or a step-by-step decomposition demo!


进程边界底层通信实现

在 OpenFOAM 中,当使用并行计算(如通过 decomposePar 将网格划分为多个子域)时,多分区的 polyMesh 网格会被分配到不同的 MPI 进程上。每个进程拥有一个子域(subdomain)的局部网格和相关场(如 Up 等)。为了保证数值计算的正确性(尤其是涉及梯度、散度等操作时),必须在进程边界(processor patches)上交换数据。以下是 OpenFOAM 如何处理进程边界数据以及实现进程间场数据交换的机制详解:


一、并行分区与 processor patch

  1. 网格划分
    使用 decomposePar 工具将全局网格划分为多个子域,每个子域分配给一个 MPI 进程。划分后,原本内部的面(internal faces)被切割,形成 processor patches(如 processor0to1processor1to0 等)。

  2. processor patch 的作用

    • 这些 patch 是虚拟边界,表示两个子域之间的接口。
    • 每个 processor patch 包含:
      • 本地进程上的面列表(faceCells
      • 对应的远端进程上的面列表(通过 neighbProcNoneighbFaceCells 映射)
      • 通信所需的数据结构(如共享点、面映射等)

二、场在并行环境中的存储

  • 每个进程只存储其子域内的体心场(如 volScalarFieldvolVectorField)。
  • 边界条件中,processor 类型的 patch 存储了:
    • 本地侧的面值(patchInternalField()
    • 需要从远端接收的对面值(通过通信获取)

三、进程间数据交换机制

OpenFOAM 使用 MPI(Message Passing Interface) 实现进程间通信。数据交换主要发生在以下场景:

1. 显式通信:send / receive
  • OpenFOAM 在 processorFvPatchField 类中实现了 updateCoeffs()evaluate() 方法。
  • 当需要获取相邻进程的场值时(如梯度计算),会触发通信。
2. 非阻塞通信(推荐)
  • 使用 MPI_IsendMPI_Irecv 实现异步通信,提高效率。
  • 示例流程:
    // 发送本地 patch 上的场值到远端
    MPI_Isend(localField.data(), localField.size(), MPI_FLOAT, destProc, tag, MPI_COMM_WORLD, &request);// 接收远端发来的对面场值
    MPI_Irecv(receivedField.data(), receivedField.size(), MPI_FLOAT, srcProc, tag, MPI_COMM_WORLD, &request);
    
  • 之后调用 MPI_Waitall() 等待所有通信完成。
3. OpenFOAM 的通信封装
  • OpenFOAM 提供了高层接口,如:

    • OPwrite / OPread:用于全局归约操作
    • reduce()sum()max() 等并行归约函数
    • send() / receive() 封装在 IPstream / OPstream
  • 对于 processorFvPatchField,其 evaluate() 方法会自动触发通信:

    template<class Type>
    void processorFvPatchField<Type>::evaluate(const Pstream::commsTypes commsType)
    {// 发送本地值this->send(this->patchInternalField(), commsType);// 接收远端值Field<Type> receivedValues;this->receive(receivedValues, commsType);// 设置对面值(用于边界条件)this->patch().patchField() = receivedValues;
    }
    

四、典型应用场景:梯度计算

当计算 grad(U) 时,需要相邻单元的 U 值。对于位于 processor patch 上的单元,其邻居在远端进程上。因此:

  1. 每个进程计算本地 U 场在 processor patch 上的值(即 U.boundaryField()[patchID])。
  2. 调用 U.boundaryField()[patchID].evaluate(),触发与远端进程的通信。
  3. 获取远端 U 值后,用于插值或梯度重构。

五、数据一致性与更新时机

  • 通信时机:通常在每个时间步或迭代步开始前,调用 field.correctBoundaryConditions(),这会触发所有边界条件的更新,包括 processor patch 的数据交换。
  • 数据一致性:OpenFOAM 保证在 evaluate() 后,processor patch 上的 patchField() 包含最新的远端数据。

六、优化:面映射与共享点处理

  • OpenFOAM 支持多种面映射策略(如 directcyclicprocessor),确保面之间的数据对齐。
  • 对于非共形网格,使用 processorCyclic 或插值方法。
  • decomposePar 时,可通过 sharedPointSync 确保顶点数据一致性(如用于几何操作)。

七、代码示例:手动触发通信

// 假设 U 是 volVectorField
U.correctBoundaryConditions();  // 触发所有边界更新// 或者对特定 patch 手动 evaluate
label patchID = mesh.boundary().findPatchID("processor0to1");
U.boundaryFieldRef()[patchID].evaluate();

总结

机制说明
processor patch表示子域间接口,存储通信映射
MPI 通信使用非阻塞 Isend/Irecv 实现高效数据交换
boundaryField::evaluate()触发通信,获取远端场值
correctBoundaryConditions()全局更新所有边界,包括 processor 边界
数据一致性通信后确保边界值最新,支持梯度、通量等计算

参考资料

  • OpenFOAM 源码:src/finiteVolume/fields/fvPatchFields/constraint/processor/
  • processorFvPatchField.CprocessorFvPatch.C
  • decomposePar 工具文档
  • OpenFOAM Programmer’s Guide

通过上述机制,OpenFOAM 实现了高效的并行场数据交换,确保了分布式内存环境下计算的正确性和可扩展性。


OpenFOAM lduMatrix::Amul()核心参数说明

在 OpenFOAM 中,lduMatrix::Amul() 是用于计算矩阵-向量乘法的核心函数之一,其形式为:

psiA = A & psi

即:psiA = A * psi,其中 A 是稀疏的 lduMatrix(对角、上对角、下对角存储),psi 是一个场变量(如速度、压力等),psiA 是结果。

Amul 的计算过程中,会涉及内部(internal)和边界(boundary)部分。对于并行计算或存在耦合边界条件(如 processor、cyclic、AMI 等)的情况,OpenFOAM 使用 interface 机制来处理这些边界上的耦合项。

以下是 Amul 调用中涉及的三个关键参数的详细说明:


1. interfaceBouCoeffs

类型:

FieldField<Field, scalar> 或更具体地,是 PtrList<Field<Type>> 的包装形式,存储每个边界接口的“边界系数”。

含义:
  • interfaceBouCoeffs 表示 从相邻域传递到当前域的修正系数,用于处理耦合边界条件中的非对角项。
  • 在矩阵乘法中,它乘以 相邻进程(或相邻边界)的场值(即 psi 在邻居侧的值),然后贡献到当前域的 psiA
  • 数学上,它对应于矩阵中“从邻居到当前”的耦合项系数。
举例:

对于一个 processor 边界,interfaceBouCoeffs 包含了从其他处理器发送过来的 psi 值所乘的权重(通常与非正交修正、梯度项、离散格式有关)。

公式示意:

Amul 中,接口部分贡献为:

psiA += interfaceBouCoeffs[patchI] * (psi received from neighbor)

注意:bouCoeffs 通常用于隐式项的“边界侧”系数,与 intCoeffs 配对使用。


2. interfaceIntCoeffs

类型:

同上,FieldField<Field, scalar>,每个接口一个场。

含义:
  • interfaceIntCoeffs 表示 当前域内部场值的修正系数,用于处理耦合边界上的“当前侧”贡献。
  • 它乘以当前域的 psi 值,并作用于当前域的残差或结果 psiA
  • 通常用于保证矩阵对称性或满足守恒性。
公式示意:
psiA -= interfaceIntCoeffs[patchI] * psi_local

注意:intCoeffsbouCoeffs 通常成对出现,分别处理当前侧和边界侧的贡献。

物理意义:
  • 在非正交网格修正、梯度计算、或隐式边界条件(如 zeroGradient)中,intCoeffs 用于将当前单元的值“推出去”参与界面通量计算。
  • fvMatrix 的构造中,这些系数由 fvPatchField::initMatrixUpdate() 或类似函数生成。

3. interfaces

类型:

UPtrList<const lduInterfaceField>,是一个接口字段的列表,每个元素对应一个耦合边界(如 processorLduInterface、cyclicLduInterface 等)。

含义:
  • interfaces 提供了所有耦合边界上的 通信和数据交换机制
  • 它负责在并行计算中:
    • 发送当前域的 psi 值到邻居;
    • 接收邻居的 psi 值;
    • 执行必要的插值(如 AMI)或变换(如 cyclic 旋转)。
  • Amul 中,interfaces 用于获取邻居侧的 psi 值,供 interfaceBouCoeffs 使用。
使用方式:
forAll(interfaces, patchi)
{if (interfaces.set(patchi)){// 交换数据interfaces[patchi].initInterfaceMatrixUpdate(// ...);}
}

三者协同工作流程(在 lduMatrix::Amul 中)

  1. 初始化通信

    • 调用 interfaces.initInterfaceMatrixUpdate(...) 开始非阻塞通信,发送当前 psi 到邻居。
  2. 计算内部贡献

    • 计算标准的 lduMatrix 内部乘法:diag * psi + upper * psi + lower * psi
  3. 处理接口贡献

    • 等待通信完成,接收邻居的 psi 值。
    • 对每个接口:
      psiA -= interfaceIntCoeffs[patchi] * psi_internal;
      psiA += interfaceBouCoeffs[patchi] * psi_received_from_neighbor;
      
    • 这些操作通过 interfaces[patchi].updateInterfaceMatrix(...) 完成。

总结表格

参数类型含义乘以的变量作用方向
interfaceIntCoeffsFieldField当前域的接口系数psi(当前域)从当前域“推出”
interfaceBouCoeffsFieldField邻居域的接口系数psi(邻居域,接收到的)从邻居“拉入”
interfacesUPtrList接口通信/插值机制无(提供数据交换)实现数据传输

应用场景举例

  • 并行计算:processor 接口使用这三个参数交换 psi 并计算耦合项。
  • 循环边界(cyclic):intCoeffsbouCoeffs 可能相等,interfaces 处理周期性映射。
  • AMI(Arbitrary Mesh Interface):interfaces 执行插值,bouCoeffs 包含插值权重。

参考源码

  • lduMatrix::Amul
  • fvMatrix::solveSegregated
  • processorFvPatchField::updateInterfaceMatrix
  • lduInterfaceField::updateInterfaceMatrix

补充说明

这些系数通常在 fvMatrix 构造时由 fvMatrix::addBoundaryDiagfvMatrix::addBoundarySource 等函数生成,具体值取决于:

  • 离散格式(如 Gauss linear
  • 非正交修正
  • 边界条件类型(如 processor, cyclicAMI

如果你正在开发自定义求解器或边界条件,理解这三个参数对于正确实现隐式/显式耦合至关重要。

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

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

相关文章

前端-npm和yarn的安装以及区别

目录 一.安装npm或yarn 安装Yarn &#x1f5a5;️ macOS / Linux 方式 1&#xff1a;通过 npm 安装&#xff08;最简单&#xff09; 方式 2&#xff1a;通过系统包管理器 &#x1fa9f; Windows 方法 1&#xff1a;用 npm 安装 方法 2&#xff1a;用 MSI 安装包 方法 3&#x…

通信原理实验之线性均衡器-迫零算法

通信原理实验之线性均衡器-迫零算法一、实验目的1、了解线性均衡器&#xff1b;2、了解迫零算法&#xff1b;3、熟悉眼图的使用。二、实验仪器1、序列码产生2、信号中继器3、加多径干扰4、迫零均衡5、信号分布图 6、眼图三、实验的理论基础1.线性均衡器&#xff1a;信道均衡技术…

把 AI 塞进「智能手环」——基于心率变异的零样本压力监测手环

标签&#xff1a;心率变异、压力监测、零样本、智能手环、TinyML、RISC-V、低功耗、边缘 AI ---- 1. 背景&#xff1a;为什么手环要「测压力」&#xff1f; 现代生活压力大&#xff0c;全球 30% 的人有焦虑症状&#xff0c;但传统手环&#xff1a; • 只能测心率&#xff0c;无…

fastapi项目细节和启动顺序

要搞清楚 FastAPI 项目启动的执行逻辑&#xff0c;需要先明确 “项目启动流程”“main 函数角色”“lifespan 作用”“导入语句执行时机” 这几个核心点的关系&#xff0c;下面逐一拆解&#xff1a;一、FastAPI 项目启动&#xff1a;先执行 “导入语句”&#xff0c;再执行 “m…

Fluent Bit系列:字符集转码测试(上)

#作者&#xff1a;程宏斌 文章目录gbk2utf8.lua 脚本说明在主配置中配置过滤器。如何在Linux系统中手动生成GBK日志&#xff1f;验证日志转码的准确性测试测试方案fluent-bit 3.0.2 转换测试这部分内容分为两个任务&#xff1a; 是验证 Lua 脚本是否能够将 GBK 编码的文本转换为…

ApiFox高并发测试用例

介绍 在开发中我们经常会测试高并发场景下的业务&#xff0c;下面来看看如何使用ApiFox编写一个高并发的测试用例 编写接口 第一步我们要编写测试的接口&#xff0c;并且建立一个用例 自动化测试 将上面的测试用例添加到自动化测试中&#xff0c;设置并发参数即可&#xff0c…

【MySQL数据库入门课程】开课啦!

&#x1f4e3; 【MySQL数据库入门课程】开课啦&#xff01; 课程名称&#xff1a;MySQL数据库实战入门&#xff08;零基础友好版&#xff09; 开课时间&#xff1a;2025年9月1日 授课方式&#xff1a;线上免费学习 实操练习 教师全程指导 适合人群&#xff1a;中职学校计算机…

面试中的并发编程题(下)

12、synchronized和Lock有什么区别语法层面synchronized是关键字&#xff0c;源码在jvm中&#xff0c;用c实现Lock是接口&#xff0c;源码又jdk提供&#xff0c;用Java实现使用synchronized时&#xff0c;退出同步代码块锁会自动释放&#xff0c;而使用Lock时&#xff0c;需要手…

Autosar之DCM模块

一、DCM介绍 DCM(Diagnostic Communication Manager)是AUTOSAR(汽车开放系统架构)基础软件BSW中服务层(Service Layer)的核心模块,其核心功能是为车辆电子控制单元(ECU)提供符合行业标准(如ISO 14229 UDS、ISO 15765 DoCAN、ISO 15031 OBD等)的诊断服务支持,为开发…

HFSS许可证与版本兼容性

在电磁仿真领域&#xff0c;HFSS&#xff08;High Frequency Structure Simulator&#xff09;软件因其卓越的性能和广泛的应用而备受赞誉。然而&#xff0c;为了确保用户能够充分利用HFSS的功能并获得流畅的仿真体验&#xff0c;许可证与版本兼容性成为了不可忽视的重要因素。…

Java有几种文件拷贝方式,哪一种效率最高?

文章目录一、Java文件拷贝的5种方式1. 传统IO流&#xff08;字节流/字符流&#xff09;手动拷贝2. NIO的FileChannel拷贝&#xff08;transferTo/transferFrom&#xff09;3. Java 7的Files.copy()工具类4. 缓冲流&#xff08;BufferedInputStream/BufferedOutputStream&#x…

【前端教程】JavaScript 基础总结

JavaScript 的三种使用方式 内部引入&#xff08;常用&#xff09;外部引入&#xff08;一个 js 文件可以被多个页面共同使用&#xff09;行内&#xff08;少用&#xff09; 区别&#xff1a; 内部引入只能够使用单页面外部引入可以应用到多个页面行内是直接在 HTML 标签内写&a…

学习-XMind 思维导图

XMind 是 2006 年诞生的思维导图软件&#xff0c;全球超 1 亿用户&#xff0c;能可视化呈现复杂信息&#xff0c;适用于学习、工作场景。它功能全&#xff08;支持多图表结构&#xff09;、易操作、颜值高、跨平台且安全&#xff0c;因此受青睐。其界面有菜单栏&#xff08;含各…

Ubuntu下MySQL、MongoDB与Redis:从安装到协同的完整指南

目录 一、MySQL&#xff1a;稳定可靠的关系型数据库 1.1 安装与配置 1.2 性能优化实战 二、MongoDB&#xff1a;灵活的文档数据库 2.1 安装与配置 2.2 性能优化策略 三、Redis&#xff1a;高性能内存数据库 3.1 安装与配置 3.2 高级应用场景 四、协同实战&#xff1a…

【传奇开心果系列】Flet框架带图标带交互动画的办公用品费用占比统计饼图自定义模板

Flet带图标带交互动画的办公用品费用占比统计饼图自定义模板 一、效果展示GIF动图 二、应用场景介绍 三、 特色说明 四、小结 五、源码下载地址 一、效果展示GIF动图 二、应用场景介绍 该应用是一个基于 Flet 框架开发的交互式办公用品费用占比统计饼图。适用于以下场景: 企业…

docker镜像在containerd为底座的k8s中使用

docker镜像和container镜像为什么不能直接共通 Docker 镜像和 containerd 镜像本质上格式兼容&#xff08;都遵循 OCI 镜像规范&#xff09;&#xff0c;但默认情况下 “不能互相识别”&#xff0c;核心原因是存储位置、命名空间和工具链的隔离&#xff0c;而非镜像格式本身的差…

Java-反射机制

在 Java 编程中&#xff0c;“反射” 是一个贯穿基础与进阶的核心概念&#xff0c;它允许程序在运行时动态获取类的结构、调用方法、操作属性&#xff0c;甚至创建对象 —— 无需在编译期明确知道类的具体信息。一、反射是什么&#xff1f;首先明确一个关键定义&#xff1a;Jav…

ARM相关的基础概念和寄存器

目录 1、机器码 2、汇编指令 3、汇编指令集 4、架构 5、内核&#xff08;CPU中的核心&#xff09; 6、处理器 7、复杂指令集和精简指令集 7.1复杂指令集 7.2精简指令集 7.3修改 8、内核中的寄存器阻值 8.1溜达存储类型 8.2、AMR处理器&#xff08;内核&#xff09…

PPT处理控件Aspose.Slides教程:在 C# 中将 PPTX 转换为 Markdown

将您的PowerPoint幻灯片转换为Markdown格式&#xff0c;使其兼容 AI 技术。在这个人工智能驱动的时代&#xff0c;GPT和Claude等大模型能够读取和生成基于 Markdown 的内容。此外&#xff0c;Markdown 还可用于博客文章和文档。因此&#xff0c;作为一名 .NET 开发人员&#xf…

Python 多进程(multiprocessing)

文章目录1. 多进程概述1.1. 多进程的概念1.2. 多进程注意事项2. 进程调用方式2.1. Process 类2.1.1. 构造方法2.1.2. 实例方法2.1.3. 属性2.2. 面向过程2.3. 面向对象3. 进程间通讯3.1. Queues3.2. Pipes3.3. Managers&#xff08;进行共享数据&#xff09;4. 进程同步5. 进程池…