Python并行编程?

现在计算机都是各种多核、异构的计算单元组成的,每一个单元都有多个处理核心。所以充分利用计算资源就显得至关重要,例如并行计算的程序、技术和工具等。

并行编程介绍

并行编程是一种编程方式,其中多个线程(或进程)同时执行不同的任务。这可以帮助提高程序的性能和吞吐量,因为它可以利用多核处理器和多核计算机的优势。

并行编程的优点:

  • 提高性能和吞吐量

  • 利用多核优势

  • 更好地管理资源

  • 利用分布式进行计算

并行编程的缺点:

  • 会增加程序的复杂性

  • 需要解决同步和死锁问题

  • 增加了额外的调试成本

  • 需要解决资源竞争问题

并行计算的内存架构

并行计算的内存架构主要分为两种:

  • 共享内存架构: 多个处理器共享同一块内存, 可以直接访问和修改共享内存中的数据, 这样可以减少数据传输的时间和提高程序的效率。

  • 分布式内存架构: 每个处理器有自己的独立内存, 需要通过网络进行数据传输, 这样可以更好地利用分布式系统的优势, 但需要处理网络通信的开销。

此外根据指令的同时执行和数据的同时执行,计算机系统可以分成以下四类:

  • 单处理器,单数据 (SISD)

  • 单处理器,多数据 (SIMD)

  • 多处理器,单数据 (MISD)

  • 多处理器,多数据 (MIMD)

SISD

SISD (Single Instruction, Single Data) 是一种计算机体系结构,指的是一个处理器执行一条指令,对应一个数据进行操作的模式。

传统的单处理器计算机都是经典的SISD系统,运行在这些计算机上的算法是顺序执行的(连续的),不存在任何并行。

SIMD

MISD(Multiple Instruction stream Single Data stream )是并行计算机的一种结构。MISD具有N个处理单元,按N条不同指令的要求对同一数据流及其中间结果进行不同的处理。一个处理单元的输出又作为另一个处理单元的输入。

MISD实际上是指令层面的并行,多个指令在相同的数据上操作。能够合理利用这种架构的问题模型比较特殊,例如数据加密等。MISD在现实中并没有很多用武之地,更多的是作为一个抽象模型的存在。

SIMD

SIMD(Single Instruction, Multiple Data)采用一个控制器来控制多个处理器,同时对一组资料中的每一个分别执行相同的操作从而实现空间上的并列性的技术。

SIMD包括多个独立的处理器,每一个都有自己的局部内存,可以用来存储数据,所有的处理器都在单一指令流下工作。所有的处理器同时处理每一步,在不同的数据上执行相同的指令。SIMD架构比MISD架构要实用的多,很多问题都可以用SIMD计算机的架构来解决。

MIMD

MIMD(Multiple Instruction Stream Multiple Data Stream)具有多个异步和独立工作的处理器。在任何时钟周期内,不同的处理器可以在不同的数据片段上执行不同的指令。

MIMD比SIMD的计算能力更强。每一个处理器都在独立的控制单元分配的指令流下工作;因此,处理器可以在不同的数据上运行不同的程序,这样可以解决完全不同的子问题甚至是单一的大问题。

并行编程内存管理

无论处理单元多快,如果内存提供指令和数据的速度跟不上,系统性能也不会得到提升。

  • 共享内存系统,共享内存系统有大量的虚拟内存空间,而且各个处理器对内存中的数据和指令拥有平等的访问权限。

  • 分布式内存模型,在这种内存模型中,每个处理器都有自己专属的内存,其他处理器都不能访问。

并行编程模型

并行编程模型表示软件执行并行计算时必须实现的方式:为了访问内存和分解任务,每一个模型都以它独自的方式和其他处理器共享信息。

共享内存模型

所有任务都共享一个内存空间,对共享资源的读写是 异步的。系统提供一些机制,如锁和信号量,来让程序员控制共享内存的访问权限。

多线程模型

单个处理器可以有多个执行流程,多个线程会对共享内存进行操作,所以进行线程间的同步控制是很重要的。

消息传递模型

消息传递模型通常在分布式内存系统中应用。更多的任务可以驻留在一台或多台物理机器上。

数据并行模型

数据并行模型有多个任务需要操作同一个数据结构,但每一个任务操作的是数据的不同部分。在分布式内存架构中则会将数据分割并且保存到每个任务的局部内存中。

Python中线程与进程

Python既支持多进程,又支持多线程。线程是最小的执行单元,而进程由至少一个线程组成。如何调度进程和线程,完全由操作系统决定,程序自己不能决定什么时候执行,执行多长时间。

耗时分析CPU密集IO密集网络密集
线性运算94227
多线程101241
多进程53121

多线程在IO密集型的操作下没有很大的优势,在CPU密集型的操作下明显地比单线程线性执行性能更差,但是对于网络请求这种忙等阻塞线程的操作,多线程的优势显著。

多进程无论是在CPU密集型还是IO密集型以及网络请求密集型中,都能体现出性能的优势。不过在类似网络请求密集型的操作上,与多线程相差无几,但却更占用CPU等资源。

如果多线程的进程是CPU密集型的,多线程并不能有多少效率上的提升,相反还可能会因为线程的频繁切换,导致效率下降,推荐使用多进程。如果是IO密集型,多线程进程可以利用IO阻塞等待时的空闲时间执行其他线程,提升效率。

Python并行编程库

Ray

https://ray.io

Ray支持许多分布式机器学习库,但并不仅限于机器学习任务,任何 Python 任务都可以使用 Ray 分解并跨系统分布。

Dask

https://www.dask.org/

Dask使用集中式调度程序来处理集群的所有任务,会自动将它们的执行分散到您的集群中。

Dispy

https://dispy.org/

dispy支持在集群、网格或云中的许多机器之间跨单个机器中的多个处理器并行执行计算。dispy 非常适合数据并行的场景。

ipyparallel

https://github.com/ipython/ipyparallel

ipyparallel专门用于跨集群并行执行 Jupyter notebook 代码,它将任何函数应用于一个序列,并在可用节点之间平均分配工作。

Joblib

https://github.com/joblib/joblib

Joblib 是一组在 Python 中提供轻量级流水线的工具,通过使用 numpy.memmap,可以在同一系统上的进程之间在内存中共享数据区域。

🤝 期待与你共同进步

🌱 亲爱的读者,非常感谢你每一次的停留和阅读!你的支持是我们前行的最大动力!🙏

🌐 在这茫茫网海中,有你的关注,我们深感荣幸。你的每一次点赞👍、收藏🌟、评论💬和关注💖,都像是明灯一样照亮我们前行的道路,给予我们无比的鼓舞和力量。🌟

📚 我们会继续努力,为你呈现更多精彩和有深度的内容。同时,我们非常欢迎你在评论区留下你的宝贵意见和建议,让我们共同进步,共同成长!💬

💪 无论你在编程的道路上遇到什么困难,都希望你能坚持下去,因为每一次的挫折都是通往成功的必经之路。我们期待与你一起书写编程的精彩篇章! 🎉

🌈 最后,再次感谢你的厚爱与支持!愿你在编程的道路上越走越远,收获满满的成就和喜悦

关于Python学习指南


如果你对Python感兴趣,想通过学习Python获取更高的薪资,那下面这套Python学习资料一定对你有用!

资料包括:Python安装包+激活码、Python web开发,Python爬虫,Python数据分析,人工智能、机器学习等学习教程。0基础小白也能听懂、看懂,跟着教程走,带你从零基础系统性地学好Python!

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
在这里插入图片描述
二、Python学习软件

工欲善其事,必先利其器。学习Python常用的开发软件都在这里了!
在这里插入图片描述
三、Python入门学习视频

还有很多适合0基础入门的学习视频,有了这些视频,轻轻松松上手Python~在这里插入图片描述

四、Python练习题

每节视频课后,都有对应的练习题哦,可以检验学习成果哈哈!
在这里插入图片描述

五、Python实战案例

光学理论是没用的,要学会跟着一起敲代码,动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。这份资料也包含在内的哈~在这里插入图片描述

六、Python面试资料

我们学会了Python之后,有了技能就可以出去找工作啦!下面这些面试题是都来自阿里、腾讯、字节等一线互联网大厂,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
在这里插入图片描述
在这里插入图片描述
七、资料领取

上述完整版Python全套学习资料已经上传CSDN官方,需要的小伙伴可自行微信扫描下方CSDN官方认证二维码免费领取

  • 19
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值