并发和并行 | Python中实现多线程 threading 和多进程 multiprocessing

本文探讨并发和并行的概念,通过Python的threading和multiprocessing库展示了多线程和多进程的实现。在多线程中,利用并发提高CPU利用率,而在多进程中,通过并行提升性能上限。通过实例比较了多线程和多进程在执行效率上的差异,并简要提到了Python修饰器的概念。
摘要由CSDN通过智能技术生成

并发和并行 | Python中实现多线程 threading 和多进程 multiprocessing

昨天晚上组会轮到我汇报技术内容,最近正在和 ray 以及 spark 打交道,索性讲一下并发和并行。反正大家都是管理学院的,平时很少接触这种,因此这个选题不大可能因为内容基础而贻笑大方。

本文摆一摆并发和并行。附上很简单的 Python 代码,涉及到自带库 threadingmultiprocessing 的使用。

并发和并行

咱们简单用多线程对应并发,多进程对应并行。多线程并发更强调充分利用性能;多进程并行更强调提升性能上限。

我用非常简单且不那么严谨的比喻来说明。

多线程

一个 CPU 相当于一个学生。

一个学生一周开一次组会,换句话说一周给老师汇报一次工作。

老师一般会给学生同时布置几个任务,比如做比赛、做项目、读论文,学生可能周一做做比赛、周二读读论文、周三做做项目… 到了组会,他就把三件事都拿出来汇报,老师很欣慰,因为在老师的视角里:学生这三件事是同时在做的。

多线程也是同一个道理,假设你的手机只有一块单核 CPU 。你的 CPU 这 0.01 秒用来播放音乐,下 0.01 秒用来解析网页… 在你的视角里:播放音乐和解析网页是同时进行的。你大可以畅快地边听音乐边网上冲浪

何谓充分利用性能? 如果这学生只有一项工作,那他这一周可能只需要花费两天来做任务,剩下时间摸鱼(针不搓,三点钟饮茶先!)。因此,我们用「多线程」来让学生实现『并发』,充分利用学生能力。

giphy.com

在实际情况中,多线程、高并发这些词语更多地出现在服务端程序里。比如一个网络连接由一个线程负责,一块 CPU 可以负责处理多个异步的请求,大大提升了 CPU 利用率。

多进程

多个 CPU ( CPU 的多核)相当于多个学生。

一个任务可以拆成几个任务相互协作、同时进行,则是多进程。

比如研究生课程,老师非得留个论文作业,都研究生了我去,留啥大作业。

那咱就多线程并行搞呗。确定了大概思路,剩下的一股脑写就行。咱队伍里一共甲乙丙丁四名同学,那就:

  • 甲同学负责 Introduction
  • 乙同学负责 Background
  • 丙同学负责 Related Works
  • 丁同学负责 Methodology

这是乙同学提出异议:不应该是先完成 Introduction 再写 Background ,一个个来嘛?

大哥,都研究生了嗷,作业糊弄糊弄差不多得了啊。让你写你就写。

可以预知,上述四部分同时进行,怎么也比一个人写四块要快。

giphy.com

所以说 多进程并行提升性能上限

在实际情况中,多进程更多地与高性能计算、分布式计算联系在一起。

Python 实现

首先声明咱的实验环境。

> python --version
Python 3.8.5

咱们设置个任务:求数的欧拉函数值。

def euler_func(n: int) -> int:
    res = n
    i = 2
    while i <= n // i:
        if n % i == 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值