Python 高级并发

Python 高级并发

Posted September 30, 2015

并发级别归纳为下列三种:

并发的归类

低级并发(Low-level Concurrency)

就是直接用『原子操作』(atomic operation)所实现的并发。这种并发是给程序库的编写者用的, 而应用程序开发者则不需要它,因为这种写法很容易出错,而且极难调试。虽说Python本身的并发机制一般是用底层的操作实现的, 但开发者不能用Python语言编写这种级别的并发代码。

中级并发(Mid-level Concurrency)

不直接使用原子操作, 但却会直接使用锁(lock),大多数语言提供的都是这种级别的并发。Python的threading.Semaphore、threading.Lock及multiprocessing.Lock等类都支持中级并发。开发应用程序的人一般都会使用终极并发,因为他们通常只能使用这个级别的并发功能。

高级并发(High-level Concurrency)

既不直接使用原子操作, 也不直接使用锁(锁与原子操作可能在幕后使用, 但开发者无须关注这些。)目前已经有编程语言开始支持高级并发了。从3.2版本起,Python提供了支持高级并发的concurrent.futures模块,此外, queue.Queue及multiprocessing这两个『队列集合类』(queue collection class)也支持高级并发.

见解

中级并发痛点

中级并发是我经常使用的, 这种并发等级虽说使用起来相对低级并发简单, 但很容易出错, 容易出现那种难于追踪而且调试起来非常复杂。此外还会导致程序莫名的崩溃、失去响应(frozen)或者僵尸(zombie)进程.

关于中级并发建议

关键问题处在共享数据上面。如果共享数据可以修改,那么必须用锁来保护,以确保所有线程和进程都能按照顺序来存取它(也就是说你必须在程序里面控制好同一时刻必须有一个线程或进程访问这份数据)。如果有多个线程或进程试图访问同一份共享数据, 那么只有其中一个能够获取到, 而其他的都会阻塞(也就是进去『空闲状态』(idle)状态)。这就意味着当锁定机制生效时, 应用程序只有一个线程或进程起作用(这就变得和非并发程序类似了),其余都得等待。由此可见我们应该进程少用锁,即便要用也不要时间太长,最简单的方法是根本不要分享可以修改的数据, 使进程本身只做运算,和I/O操作, 操作完后返回结果。这样就不用加锁了, 而大部分并发问题也就随之消失了.

高级并发

后面会追加一些高级并发, 对于Python来说高级并发才显得Pythonic

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏IT技术精选文摘

使用API网关构建微服务

当您选择将应用程序构建为一组微服务时,您需要确定应用程序的客户端将如何与微服务器进行交互。使用单体应用程序,只有一组(通常是复制的,负载均衡的)端点。然而,在微...

4028
来自专栏漏斗社区

业务逻辑漏洞探索之越权漏洞

越权,顾名思义,就是超出了权限或权力范围。多数WEB应用都具备权限划分和控制,但是如果权限控制功能设计存在缺陷,那么攻击者就可以通过这些缺陷来访问未经授权的功能...

1663
来自专栏blackpiglet

ssh无密码登录失败分析

输入 184 就可以登录到 IP 以184结尾的服务器上了.可是后来有些服务器修改了密码,不再使用默认密码了,随着这种情况越来越多,想记住密码也越来越难.

5534
来自专栏运维

Win7下的修改grub工具bcdedit

bcdedit  /set {id} description "你所想要的名字" 这可以做些个性化的设置

1991
来自专栏butterfly100

Chris Richardson微服务翻译:构建微服务之使用API网关

Chris Richardson 微服务系列翻译全7篇链接: 微服务介绍 构建微服务之使用API网关(本文) 构建微服务之微服务架构的进程通讯 微服务架构中的服...

2946
来自专栏追不上乌龟的兔子

微服务实现 - Netflix技术栈

你好。今天我将讨论并解释如何实现基于微服务的系统。有很多用于实现微服务的工具和技术。我今天关注的是Netflix技术栈和SpringBoot。目前微服务是业内热...

1771
来自专栏云计算教程系列

什么是高可用性?

随着对旨在为关键系统提供服务的可靠和高性能基础架构的需求不断增加,术语可扩展性和高可用性不再受欢迎。虽然处理增加的系统负载是一个常见问题,但减少停机时间和消除单...

5160
来自专栏CSDN技术头条

亿级Web系统搭建:单机到分布式集群

当一个Web系统从日访问量10万逐步增长到1000万,甚至超过1亿的过程中,Web系统承受的压力会越来越大,在这个过程中,我们会遇到很多的问题。为了解决这些性能...

3006
来自专栏IT技术精选文摘

分布式系统关键技术之服务调度

服务关键程度要通过对业务的梳理来发现。服务依赖关系用Spring Cloud的一套方法就能够非常好的解决,但是千万不要出现循环依赖,解决方式是通过第三方的消息队...

1484
来自专栏开心的学习之路

01 用Intellij idea+Gradle+jmonkey开发3d仿真应用

由于项目需求是某一施工过程的模拟,对准确性的要求高于视觉效果,交付时间又比较紧,需要从数据库和dll中实时读入数据,进行可视化显示,因此选用了JmonkeyEn...

2968

扫码关注云+社区

领取腾讯云代金券