博客
关于我
Python 中多线程与多处理之间的区别
阅读量:796 次
发布时间:2023-03-06

本文共 1651 字,大约阅读时间需要 5 分钟。

说明

本文旨在探讨Python中的多线程和多处理技术及其适用场景。为了更好地理解这些概念,我们将从基础知识入手,逐步深入学习代码实现。


基本术语和概念

程序可以被视为一组执行特定任务的指令集合,通常存储在计算机的硬盘上。进程则是指已加载到内存中的可执行文件,它包含所有运行所需的资源,并拥有独立的内存空间。线程则是进程中的执行单元,多个线程可以共享进程的内存空间并在同一进程内并发运行。

多线程技术允许进程生成多个线程,通过并发执行不同的任务来提高效率。然而,Python中的全局解释器锁(GIL)会阻止线程同时运行,导致并行执行的效果不如其他语言。多处理技术则通过在多个进程之间分配任务,实现真正的并行性。每个进程都有自己的内存空间和Python解释器实例,从而避免资源冲突。


进程对CPU绑定的任务执行

1. 一个接一个地运行 IO 绑定任务两次

我们将调用io_bound函数两次,每次执行需要10秒。由于同一进程内的线程是串行执行的,整个程序将耗时20秒。

import osfrom multiprocessing import ProcessCOUNT = 200000000SLEEP = 10def io_bound(sec):    pid = os.getpid()    print(f"PID: {pid}")    print(f"Process name: {os.getpid()}")    print(f"Thread name: {current_thread().name}")    print(f"---> Start sleeping...")    time.sleep(sec)    print(f"---> Finished sleeping...")

2. 使用线程运行受 IO 绑定的任务

通过使用多线程,我们可以并行执行两个io_bound函数。每个线程占用同一进程内的资源,但通过并行执行显著缩短总执行时间。

from threading import Threaddef io_bound(sec):    print(f"---> Start sleeping...")time.sleep(SLEEP)print(f"---> Finished sleeping...")

3. 一个接一个地运行两次 CPU 绑定任务

CPU绑定任务需要更多资源,同一进程内的线程执行会导致资源竞争和性能瓶颈。

def cpu_bound(n):    print(f"---> Start counting...")    while n > 0:        n -= 1    print(f"---> Finished counting...")

4. 使用线程运行受 CPU 绑定的任务

尽管多线程可以并行执行任务,但由于GIL的限制,线程间的资源竞争会导致性能下降。对于CPU密集型任务,线程不如进程效果好。

5. 使用多处理实现 CPU 绑定的任务

通过启动多个进程,我们可以利用多个CPU核同时执行任务。每个进程独立运行,资源不再互相竞争,整体性能得到显著提升。

from multiprocessing import Processdef cpu_bound(n):    print(f"---> Start counting...")    while n > 0:        n -= 1    print(f"---> Finished counting...")

6. 使用多处理运行 IO 绑定的任务

虽然多处理可以实现并行性,但 IO 绑定的任务通常不占用 CPU 资源,因此多处理的优势不如多线程明显。线程是优先选择的方案。


结论

  • IO绑定任务:多线程是更优的选择。
  • CPU密集型任务:多处理提供了更好的并行性能。

通过对比多线程和多处理的特点,我们可以更好地理解两者的适用场景,并在实际开发中做出更合适的选择。

转载地址:http://ufofk.baihongyu.com/

你可能感兴趣的文章
python 将函数加到列表中进行调用
查看>>
python 将图片与字符串相互转换
查看>>
Python 嵌套字典全面指南
查看>>
Python 工具v简介
查看>>
Python编程入门指南:从零开始探索编程的奇妙世界
查看>>
python 常见内置函数setattr、getattr、delattr、setitem、getitem、delitem
查看>>
Python 常见的错误类型和继承关系
查看>>
python 常量_零基础学Python系列之一:Python的变量与常量
查看>>
Python 并发编程
查看>>
Python编程入门基础及高级技能、Web开发、数据分析和机器学习与人工智能
查看>>
python 序列化操作
查看>>
Python 开发者,这 7 个 VS Code 插件极力推荐
查看>>
python手把手视频_硬货 | 手把手带你构建视频分类模型(附Python演练))
查看>>
python 录音左右声道_Python分离立体声wav压缩文件的左右声道
查看>>
Python 循环异或对文件进行加解密
查看>>