diff --git a/B 高性能模式/01 高性能模式.md b/B 高性能模式/01 高性能模式.md index ab2d1a4..5f52a81 100644 --- a/B 高性能模式/01 高性能模式.md +++ b/B 高性能模式/01 高性能模式.md @@ -3,11 +3,11 @@ 本文从计算机系统结构的角度探讨提高 Python 代码任务执行速度的方法,涵盖硬件与软件交互的优化策略。以下是一些关键方法: -计算单元层面利用多核并行计算 +### 计算单元层面利用多核并行计算 - 对于 CPU 密集型任务,使用多进程,每个进程拥有独立的 Python 解释器和内存空间运行在独立的内核上,实现并行计算。 - I/O 层面减少等待时间 +### I/O 层面减少等待时间 - 异步编程:asyncio 库允许在单线程中处理多个 I/O 操作(实现并发执行),减少等待时间。 - 多线程:Python的线程切换是由解释器完成,而不是操作系统。切换不仅基于时间间隔,Python的多线程 时间切片间隔可以通过 sys.setswitchinterval() 设置,通常以秒为单位。其他切换触发条件 : - 当线程等待I/O操作(如网络请求或磁盘读写)时,GIL会被释放,允许其他线程运行。 @@ -16,23 +16,23 @@ - 批量处理,减少I/O请求数量 -编译层面减少解释器开销 +### 编译层面减少解释器开销 - 使用 JIT 编译器:Just-In-Time(JIT)编译可以在运行时将Python代码编译成机器码,从而提升执行速度 。PyPy 是一种替代 CPython 的 Python 实现,使用即时编译(JIT)技术,PyPy 的 JIT 引擎可以分析代码执行路径,优化频繁调用的函数,充分利用处理器架构。 - **Cython 编译**:Cython 允许开发者为 Python 代码添加 C 类型的注解,并编译为 C 代码,再由 C 编译器生成机器码。Cython 可实现接近 C 的执行速度,特别适合静态类型优化的场景。 - 利用Python的语言特性 +### 利用Python的语言特性 - **使用内置数据类型和函数**:内置的数据类型(如列表、字典、集合等)和函数通常经过高度优化。 - **减少全局变量的使用**:访问全局变量通常比局部变量慢,因为它们需要在更大的作用域中查找。 - 减少函数调用可降低堆栈操作开销 - **选择合适的数据结构**:例如,如果需要快速查找元素,则应该优先考虑使用字典或集合而非列表 - 使用列表推导式替代循环追加,避免频繁创建和销毁临时对象的开销。 - 使用生成器而不是列表来处理大数据集,以减少内存占用。 -- 使用XX池或预分配资源。 +- 使用XX池或预分配资源。 -使用第三方高性能库 -- NumPy、Pandas这些库通常用 C/C++ 编写并经过优化。 +### 使用第三方高性能库 +- NumPy、Pandas这些库通常用 C/C++ 编写并经过优化。 - NumPy 模块使用连续内存块存储数据,向量化操作来代替显式的Python循环更高效 。 - SIMD 指令加速, NumPy、Numba、Pandas/SciPy 都使用了SIMD。Cython 可以直接用 C 代码使用SIMD 。 - `gzip` 模块可压缩数据,减少网络传输的数据量,提高网络传输速度。 diff --git a/B 高性能模式/相关知识.md b/B 高性能模式/相关知识.md index 34d2da4..4558467 100644 --- a/B 高性能模式/相关知识.md +++ b/B 高性能模式/相关知识.md @@ -1,5 +1,6 @@ ### 协程 + - 异步编程是一种编程范式,旨在提高程序的并发能力。 - 协程是异步编程的一种具体实现。协程是一种特殊的函数,可以在执行过程中暂停,并在稍后恢复执行。协程提供了一种轻量级的并发方式,允许多个任务在单线程内交错执行,非常适合 I/O 密集型场景。Python 中的协程通常通过 yield 或 async/await 语法实现: 生成器协程:使用 yield 关键字暂停和恢复执行 ; 原生协程:使用 async def 定义,通过 await 等待其他操作完成。 - 异步编程在 python 社区讨论中,常常等价于协程,甚至等价于 async @@ -14,7 +15,7 @@ JIT 跨平台,生成适合当前平台的机器码。 JIT 的工作原理:**解释执行**:程序开始时,代码以解释方式执行(逐行解释字节码)。 **热点检测**:JIT 编译器监控代码执行,识别频繁执行的代码段(称为“热点”)。 **动态编译**:将热点代码编译为机器码,后续执行直接运行机器码,避免解释执行的开销。 **优化**:JIT 编译器可以根据运行时信息进行优化(如内联函数、消除死代码)。 在 Python 中利用 JIT 加速的方法包括: -1. **PyPy**:通用的 Python 实现,适合大多数场景。pypy your_script.py -2. **Numba**:专注于数值计算,适合科学计算和数据分析。用 `@jit` 装饰器标记需要加速的函数。 -3. **Cython**:将 Python 代码编译为 C 代码,适合需要极致性能的场景。支持 JIT 和 AOT 编译 。 -4. **Taichi**:专注于高性能计算,适合图形学、物理仿真等领域。 \ No newline at end of file +- **PyPy**:通用的 Python 实现,适合大多数场景。pypy your_script.py +- **Numba**:专注于数值计算,适合科学计算和数据分析。用 `@jit` 装饰器标记需要加速的函数。 +- **Cython**:将 Python 代码编译为 C 代码,适合需要极致性能的场景。支持 JIT 和 AOT 编译 。 +- **Taichi**:专注于高性能计算,适合图形学、物理仿真等领域。 \ No newline at end of file