python并行编程 - 介绍篇
目录1
介绍篇
线程篇
进程篇
异步篇
GPU篇
分布式篇
设计并行编程
任务分解:将程序分解为任务,在不同处理器上执行以实现并行化。(可以使用以下两种方法)
- 领域分解:将
问题数据
分解 (当处理的数据量很大时,分开处理)- 功能性分解:将
问题
分解为任务 (把大的任务分解为多个小任务处理)
任务分配:将任务分配到各个处理器上 (目的是负载均衡
)
聚集:将小任务与大任务合并到一起从而改进性能的过程
如果任务数量远远超过可用的处理器数量,由于线程切换等其它因素会导致效率降低
如果计算机有针对大量小任务而进行特别的设计,如采用GPU计算,那将能从大量小任务的运行中获益
映射:指定哪个任务将要执行 (目标是将总执行时间降到最低)(可以使用以下2中策略,这2个策略间由于是冲突的,需要做出权衡)
- 通信频繁的任务放在同一个处理器中来增加
局部性
- 可以并发执行的任务放在不同的处理器中增加
并发性
注意! 映射问题,即NP完备2。对于相同大小的任务,很容易直接映射
如果是每个任务的工作量千差万别,就需要采用负载均衡算法
在运行期间确定聚集与映射的策略。
如果在程序执行期间通信量或任务量发生变化的情况,可以使用动态的负载均衡算法
(不同的问题存在多种负载均衡算法,有全局或局部的。全局算法需要全局的掌握,会增加大量成本。局部算法只依赖于特定任务本身的信息,不过难以找到最优)
(存在 管理者/执行者(管理者调度)、层次化的管理者/执行者(分组,每组都有个管理者调度)、去中心化的模型(每个处理器会维护自己的任务池))
进程与线程比较3
性能比较
多线程比多进程成本低,但性能更低
优缺点对比
多进程优点
- 每个进程相互独立,子进程异常不影响父进程
- 通过增加CPU,就可容易扩充性能
- 没有锁的影响
- 每个子进程都有独立的地址空间和资源
多进程缺点
- 逻辑控制复杂,需要和主进程交互
- 需要跨进程边界,如有大量数据需要传输不太好,适合少量数据传输、密集运算
多线程优点
- 逻辑控制简单
- 无需跨进程边界
- 可直接共享资源
- 资源消耗比进程少
多线程缺点
- 其中的某个线程崩溃可能会影响整个程序
- 线程之间的同步和锁的控制比较麻烦
- 每个线程与主线程共用地址空间
注意! 无论进程,还是线程多了以后,他们的调度也会消耗较多的CPU资源
python并行编程的问题
一般来说,一个进程可以包含多个并行线程。不过,Python解释器并非完全是线程安全的。为了支持多线程的Python程序,会使用名为全局解释器锁GIL
(Global Interpreter Lock)的全局锁。这意味着在同一时刻只有一个线程会执行Python代码。(如果多个线程尝试访问同一个对象数据,那么它可能处于不一致的状态)
故此,python中的并行编程想要发挥多核的优势推荐使用多进程代替多线程
为什么不去除GIL? 更多细节:Python 最难的问题
python中进程与线程的效率
由于python自身存在GIL的问题,同一时刻只能运行一个线程,在一些实验对比中,我们会发现python中进程与线程之间的差异,在这里直接给出结论
对比操作:CPU密集型
、IO密集型
、网络请求密集型
多线程
- CPU密集型操作,性能更差
- IO密集型操作,性能更差
- 网络请求密集型操作,优势明显
多进程
- CPU密集型操作,优势明显
- IO密集型操作,优势明显
- 网络请求密集型操作,与多线程相差无几,却更占用CPU等资源
故CPU密集型、IO密集型操作,首选多进程,网络请求密集型选择多线程
(附:如果追求效率,CPU密集型操作应首选C/C++
语言
IO密集型操作,CPU消耗很少,换用C/C++也很难得到效率的提升,应采用开发效率高的语言,脚本语言
是首选)
更多细节:Python中单线程、多线程和多进程的效率对比实验
参考书籍:《Python并行编程手册》 ↩︎
NP完全问题是世界七大数学难题之一
所有的完全多项式非确定性问题,都可以转换为一类叫做满足性问题的逻辑运算问题。既然这类问题的所有可能答案,都可以在多项式时间内计算,人们于是就猜想,是否这类问题存在一个确定性算法,可以在多项式时间内直接算出或是搜寻出正确的答案呢?这就是著名的NP=P?的猜想(百度百科)
https://zh.wikipedia.org/wiki/NP完全(wiki百科) ↩︎参考:追溯到最早的一篇2011年的页面已失效了 ↩︎
python并行编程 - 介绍篇相关推荐
- Python并发编程理论篇
Python并发编程理论篇 前言 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手. 很多已经做案例的人,却不知道如何去学习更加高深的知识 ...
- Python 并行编程教程 | Lynda教程 中文字幕
Python 并行编程教程 | Lynda教程 中文字幕 Python Parallel Programming Solutions 课程ID: 604237 时长: 4.0小时 所属类别:Pytho ...
- python多线程并行编程,Python并行编程(二):基于线程的并行
1.介绍 软件应用中使用最广泛的并行编程范例是多线程.通常一个应用有一个进程,分成多个独立的线程,并行运行.互相配合,执行不同类型的任务. 线程是独立的处理流程,可以和系统的其他线程并行或并发地执行. ...
- Python 并行编程
参考:python-parallel-programming-cookbook-cn:https://python-parallel-programmning-cookbook.readthedocs ...
- python多线程和多进程——python并行编程实验
工作中经常涉及到加速程序的运行,除了代码逻辑的优化,算法的优化之外,还经常使用的一招就是并发编程.至于python的并型编程这一块.说到并行编程,我们不得不谈线程和进程这两个概念: 进程:对于操作系统 ...
- python中的多线程求值串行和并行_python多线程和多进程——python并行编程实验
工作中经常涉及到加速程序的运行,除了代码逻辑的优化,算法的优化之外,还经常使用的一招就是并发编程.至于python的并型编程这一块.说到并行编程,我们不得不谈线程和进程这两个概念: + 进程:对于操作 ...
- Python少儿编程入门篇(2)算术运算和赋值运算
Python少儿编程小课堂(二) 入门篇(2)算术运算和赋值运算 标识符 就是一个名字,就好像我们每个人都有自己的名字一样,主要作用就给变量.函数.类.模块以及其他对象起名字. 命名规则 1. 标识符 ...
- Python少儿编程入门篇(3)比较运算和逻辑运算
Python少儿编程小课堂(三) 入门篇(3)比较运算和逻辑运算 运算符(2) 上一节课讲了算术运算符和赋值运算符,本节继续讲其它运算符: 比较运算符 ==.!=.>.<.>= .& ...
- Python异步编程入门篇
本人很懒,不想详细些过程,后续会更新代码也许,具体文章推荐链接 ---------深入理解Python异步编程-----–
- python并行编程篇
章节目录 第二十一章 进程对象 进程的理解 操作系统 OS发展史 第二十二章 进程并发 进程并发的原理 进程并发编程实践 僵尸进程与孤儿进程(linux系统) 守护进程 互斥锁 IPC机制(进程间的通 ...
最新文章
- Python2.7 安装numpy报错解决方法
- 做一个略调皮的个人主页--相册与随笔篇
- python做logistic回归_用Python做Logistic回归
- 【编译原理】关于文法形式化定义的探索
- struts 文件下载
- android 4.4 OpenGL实现库的加载规则
- Blocking/Non-Blocking VS Sync/Async VS Overlapped
- html属性可以用来定义内联样式,18年6月考试《网页设计与制作》期末大作业.doc...
- STL中的multimap---顺便说说如何查找同一关键字对应的所有值
- selenium webdriver (6) -- iFrame
- 做测试开发半年涨薪20W入职名企大厂,这位90后凭什么?
- 工具介绍(3)- TS 视频文件分析工具神器
- 空间计量经济学 matlab,空间计量经济学基于MATLAB的应用分析
- 蝴蝶蓝暂排第一:第四届橙瓜网络文学奖20年十佳游戏大神
- 搞科研必须了解的五十个学术网站
- Technorati 推出博客广告媒体
- 当计算机遇上经济学:如何量化你的投资并获得第一桶金
- 使用github制作简历
- 一个菜鸟实习生的月总结
- 使用PHPWord把html转成word文档并支持下载
热门文章
- rust编程 UI框架 -druid -Selector选择器
- idea spring boot 修改 html,js 等不用重启即时生效
- 博客图床最佳解决方案
- Executable: C:\PhoneYou\roshan-0.6.6\bin\RoshanQuick.exe
- 图的应用:骑士周游问题
- 网络语言2019流行语C位解,最新骂人网络语言 2019网络骂人流行语大全
- Unity资源清理工具
- 创建自己的SQL Server Management Studio 17(SSMS)扩展
- 【C语言题解】将数字金额翻译成中文大写金额
- FrontEnd前端文件架构