菜菜的并发编程笔记 |(一)并发编程介绍

在这里插入图片描述
系列索引:菜菜的并发编程笔记 | Python并发编程详解(持续更新~)

一、思维导图🕵️‍♀️

在这里插入图片描述

二、为什么要引入并发编程?

场景1:一个网络爬虫,按顺序爬取花了1小时,采用并发下载减少到20分钟!
场景2:一个APP应用,优化前每次打开页面需要3秒,采用异步并发提升到每次200毫秒;

正确答案

  • 引入并发,就是为了提升程序运行速度

  • 学习并掌握并发编程,是高级别+高薪资程序员的必备能力

三、常见的程序提速方法

请添加图片描述

  • 单线程串行:典型的无任何并发的编程,也是大多数人入门的编程方式

  • 多线程并发:我们的计算机支持CPU和IO同时工作,因此可以在遇到IO操作时进行线程的切换,去执行其他线程,使用threading模块

  • 多CPU并行(多进程):多进程就是可以使用多个CPU进行工作,受制于Python的GIL我们在多线程中只能使用一块CPU,多进程解决了这个问题,但要注意多进程的各个进程环境是独立的,主要使用multiprocessing模块

  • 多机器并行:利用大数据技术实现分布式计算

四、Python对并发编程的支持

多线程:threading,利用CPU和IO可以同时执行的原理,让CPU不会干巴巴等待IO完成

多进程:multiprocessing,利用多核CPU的能力,真正的并行执行任务

异步IO:asyncio,在单线程利用CPU和IO同时执行的原理,实现函数异步执行

使用Lock对资源加锁,防止冲突访问

使用Queue实现不同线程/进程之间的数据通信,实现生产者-消费者模式

使用线程池Pool/进程池Pool,简化线程/进程的任务提交、等待结束、获取结果

使用subprocess启动外部程序的进程,并进行输入输出交互

五、怎么选择多线程、多进程、多协程?

Python并发编程有三种方式:多线程Thread、多进程Process、多协程Coroutine

我们要根据项目的需求灵活选择不同的并发方式,并发方式选择不当会适得其反!!!

(1)什么是CPU密集型计算、IO密集型计算?

请添加图片描述

(2)多线程、多进程、多协程的对比

请添加图片描述

(3)怎样根据任务选择对应技术?

请添加图片描述

针对不同的项目主要看是CPU密集型还是IO密集型,对于IO密集型的我们还需要具体分析看是否满足上述三个条件,协程是比较新的技术,使用起来可能会受到阻碍但效果也可能会更好。

六、线程池和进程池

原理:提前创建好线程/进程放在池子里,新的task到来可以重用这些资源,减少了新建、终止线程/进程的开销

  • 池化的好处
    • 提升性能:因为减去了大量新建、终止线程的开销,重用了线程资源
    • 适用场景:适合处理突发性大量请求或需要大量线程完成任务、但实际任务处理时间较短
    • 防御功能:能有效避免系统因为创建线程过多,而导致系统负荷过大响应变慢等问题
    • 代码简洁:使用线程池的语法比自己新建线程执行线程更加简洁

Python进阶之并发编程篇持续更新,欢迎点赞收藏关注

上一篇:菜菜的并发编程笔记 | Python并发编程详解(持续更新~)
下一篇: 菜菜的并发编程笔记 |(二)全局解释器锁GIL

本人水平有限,文章中不足之处欢迎下方👇评论区批评指正~

如果感觉对你有帮助,点个赞👍 支持一下吧 ~

不定期分享 有趣、有料、有营养内容,欢迎 订阅关注 🤝 我的博客 ,期待在这与你相遇 ~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猿知

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值