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中单线程、多线程和多进程的效率对比实验



  1. 参考书籍:《Python并行编程手册》

  2. NP完全问题是世界七大数学难题之一
    所有的完全多项式非确定性问题,都可以转换为一类叫做满足性问题的逻辑运算问题。既然这类问题的所有可能答案,都可以在多项式时间内计算,人们于是就猜想,是否这类问题存在一个确定性算法,可以在多项式时间内直接算出或是搜寻出正确的答案呢?这就是著名的NP=P?的猜想(百度百科)
    https://zh.wikipedia.org/wiki/NP%E5%AE%8C%E5%85%A8(wiki百科)

  3. 参考:追溯到最早的一篇2011年的页面已失效了

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,639评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,277评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,221评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,474评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,570评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,816评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,957评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,718评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,176评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,511评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,646评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,322评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,934评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,755评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,987评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,358评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,514评论 2 348

推荐阅读更多精彩内容

  • 本文是我自己在秋招复习时的读书笔记,整理的知识点,也是为了防止忘记,尊重劳动成果,转载注明出处哦!如果你也喜欢,那...
    波波波先森阅读 11,244评论 4 56
  • 一. 操作系统概念 操作系统位于底层硬件与应用软件之间的一层.工作方式: 向下管理硬件,向上提供接口.操作系统进行...
    月亮是我踢弯得阅读 5,959评论 3 28
  • 必备的理论基础 1.操作系统作用: 隐藏丑陋复杂的硬件接口,提供良好的抽象接口。 管理调度进程,并将多个进程对硬件...
    drfung阅读 3,530评论 0 5
  • 渠道是接触顾客的点都叫渠道。 连带率:产品相互关联,互相补充和需要 大数据选品:根据地区选择适合的产品 社群效应 ...
    大梦张吉玲阅读 206评论 0 0
  • 想成为一个写手,想成为一个CV怪物,想努力创业,想…… 梦想依旧那么美好,现实依旧那么残忍。 曾经以为是天堂的地方...
    藜阿宅阅读 382评论 0 0