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

python中的并发/并行与多线程/多进程/异步的关系

文章目录

    • 一、并发和并行的相关介绍
      • (一)并发
      • (二)并行
    • 二、并发和并行的实现方式
      • (一)并发与多线程 / 异步的关系大致介绍
      • (二)并行与多进程的关系大致介绍
      • (三)实现并发的方式
        • 1. 多线程实现
        • 2. 异步实现
      • (四)实现并行的方式
        • 1. 多进程实现
      • (五)总结

一、并发和并行的相关介绍

(一)并发

  • 并发是指两个或多个事件在同一时间间隔内发生,计算机领域表现为多个任务在一段时间内交替执行,宏观上看似同时进行。例如,电脑同时运行浏览器、音乐播放器等多个应用程序,它们交替获取 CPU 时间片来执行操作。

(二)并行

  • 并行是指两个或多个事件在同一时刻同时发生,在计算机硬件环境,当有多个处理器或多个 CPU 核心时,多个任务可真正同时执行。比如,在 4 核 CPU 计算机上,可同时运行 4 个独立程序,每个核心负责一个程序。

二、并发和并行的实现方式

(一)并发与多线程 / 异步的关系大致介绍

  • 多线程与并发 :多线程是实现并发的常见方式,一个进程包含多个线程,这些线程共享进程的资源,并且可以独立执行。在单核 CPU 环境下,操作系统通过快速切换线程,使得多个线程看起来像是同时在运行,从而实现了并发的效果。
  • 异步与并发 :异步操作通常与并发相结合。异步调用会返回一个占位符,当操作完成时,会通知调用者或者将结果返回给调用者。例如,在进行网络请求等 IO 密集型操作时,可以采用异步方式,这样在等待响应的过程中,程序可以继续执行其他代码,从而实现并发执行任务的效果。

(二)并行与多进程的关系大致介绍

  • 多进程与并行 :多进程是实现并行的重要方式。在多核 CPU 环境下,多个进程可以被分配到不同的处理器核心上,每个进程拥有自己独立的内存空间和资源,它们可以同时执行,真正实现了并行处理。例如,在分布式计算任务中,多个计算节点(即多个进程)可以同时处理不同的数据子集,从而提高整体的计算效率。

(三)实现并发的方式

1. 多线程实现
  • 创建线程的方式 :在 Python 中,可以使用 threading 模块来创建多线程。通过继承 Thread 类或者定义线程任务函数来实现。
  • import threadingdef task(name):for i in range(5):print(f"{name} - {i}")thread1 = threading.Thread(target=task, args=("Thread1",))
    thread2 = threading.Thread(target=task, args=("Thread2",))
    thread1.start()
    thread2.start()
    thread1.join()
    thread2.join()
    
  • 线程通信和同步 :线程共享进程资源,需进行通信和同步。Python 中可用 threading.Lock 等来保证线程安全,避免多个线程同时访问共享变量导致数据错误。
2. 异步实现
  • import asyncioasync def task(name):for i in range(5):print(f"{name} - {i}")await asyncio.sleep(0)  # 模拟异步操作,交出控制权async def main():task1 = asyncio.create_task(task("Task1"))task2 = asyncio.create_task(task("Task2"))await task1await task2asyncio.run(main())
    
  • 在这个异步示例中,通过 asyncawait 关键字来实现异步操作。当执行到 await asyncio.sleep(0) 时,当前任务会暂停,允许其他任务执行,从而实现并发。

(四)实现并行的方式

1. 多进程实现
  • 在操作系统层面 :操作系统提供创建进程的系统调用,如 Linux 系统的 fork()。新进程复制父进程资源,独立运行。多核 CPU 环境下,多个进程可分配到不同核心并行处理。
  • 在编程语言层面 :在 Python 中,可以使用 multiprocessing 模块来创建多进程。
  • import multiprocessingdef process_task(name):for i in range(5):print(f"Process {name}: {i}")if __name__ == "__main__":p1 = multiprocessing.Process(target=process_task, args=("Process1",))p2 = multiprocessing.Process(target=process_task, args=("Process2",))p1.start()p2.start()p1.join()p2.join()
    
  • 这段代码启动了两个进程来执行任务,在多核 CPU 环境下可并行执行。

(五)总结

  • 并发和并行都为提高程序效率,利用计算机资源。
  • 并发侧重任务交替执行,通过多线程、多进程和异步等方式实现,适用于单核资源充分利用及 IO 密集型任务。
  • 并行侧重任务同时执行,依赖多核处理器资源,多进程实现常见,适合计算密集型任务。
  • 实际应用中,可根据需求和硬件环境选择合适实现方式,有时可混合使用并发和并行技术,如在多核计算机上开发的网络服务程序,用多线程处理并发连接,用多进程并行处理计算密集型业务逻辑。

相关文章:

  • ArrayList和LinkedList(深入源码加扩展)
  • Python----循环神经网络(BiLSTM:双向长短时记忆网络)
  • Facebook 隐私保护的优劣势分析
  • Java数据校验:确保数据完整性和正确性
  • Elasticsearch | 如何将修改已有的索引字段类型并迁移数据
  • 深入解析C++引用:从别名机制到函数特性实践
  • 前端下载文件,文件打不开的问题记录
  • Rust 学习笔记:Cargo 工作区
  • 使用 HTML + JavaScript 实现文章逐句高亮朗读功能
  • nginx+Tomcat负载均衡群集
  • 3步在小米13手机跑DeepSeek R1
  • java-springboot文件上传校验之只允许上传excel文件,且检查不能是脚本或者有害文件或可行性文件
  • 013旅游网站设计技术详解:打造一站式旅游服务平台
  • 【设计模式-4.7】行为型——备忘录模式
  • EtherCAT背板方案:方芯半导体工业自动化领域的高速、高精度的通信解决方案
  • 深入理解 JSX:React 的核心语法
  • electron下载文件
  • RequestRateLimiterGatewayFilterFactory
  • 使用Process Explorer、System Informer(Process Hacker)和Windbg工具排查软件高CPU占用问题
  • MS1023/MS1224——10MHz 到 80MHz、10:1 LVDS 并串转换器(串化器)/串并转换器(解串器)
  • 网站建设详细教程视频/企业管理培训课程视频
  • 深圳公司网站推广/seo网络优化
  • 做家纺的主要国际网站/seo描述快速排名
  • 日照建设工程信息网站/国际军事新闻最新消息今天
  • 网站不备案做优化/推广app大全
  • 发票项目网站建设费/seo推广费用