摘要: 前面介绍了互斥锁和条件变量解决线程间的同步问题,并使用条件变量同步机制解决了生产者与消费者问题。让我们考虑更复杂的一种场景:产品是各不相同的。这时只记录一个数量就不够了,还需要记录每个产品的细节。很容易想到需要用一个容器将这些产品记录下来。Python的Queue模块中提供了同步的、线程安全的队列类... 阅读全文
posted @ 2015-04-17 20:26 zhek 阅读(2501) 评论(0) 推荐(0) 编辑
摘要: 互斥锁是最简单的线程同步机制,Python提供的Condition对象提供了对复杂线程同步问题的支持。Condition被称为条件变量,除了提供与Lock类似的acquire和release方法外,还提供了wait和notify方法。线程首先acquire一个条件变量,然后判断一些条件。如果条件不满... 阅读全文
posted @ 2015-04-17 20:16 zhek 阅读(329) 评论(0) 推荐(0) 编辑
摘要: 死锁在线程间共享多个资源的时候,如果两个线程分别占有一部分资源并且同时等待对方的资源,就会造成死锁。尽管死锁很少发生,但一旦发生就会造成应用的停止响应。下面看一个死锁的例子:按 Ctrl+C 复制代码按 Ctrl+C 复制代码执行结果:Thread-1 got resAThread-1 got re... 阅读全文
posted @ 2015-04-17 19:27 zhek 阅读(448) 评论(0) 推荐(0) 编辑
摘要: 上一节的例子中,每个线程互相独立,相互之间没有任何关系。现在假设这样一个例子:有一个全局的计数num,每个线程获取这个全局的计数,根据num进行一些处理,然后将num加1。很容易写出这样的代码:# encoding: UTF-8import threadingimport timeclass MyT... 阅读全文
posted @ 2015-04-17 19:10 zhek 阅读(2407) 评论(0) 推荐(0) 编辑
摘要: 虚拟机层面Python虚拟机使用GIL(Global Interpreter Lock,全局解释器锁)来互斥线程对共享资源的访问,暂时无法利用多处理器的优势。语言层面在语言层面,Python对多线程提供了很好的支持,Python中多线程相关的模块包括:thread,threading,Queue。可... 阅读全文
posted @ 2015-04-17 19:00 zhek 阅读(398) 评论(0) 推荐(0) 编辑
摘要: 看廖雪峰的多线程多进程教程看的云里雾里的,google了一下,贴上来点重点。进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间。多任务操作系统可以“并发”执行这些进程。线程是指进程中乱序、多次执行的代码块,多个线程可以“同时”运行,所以认为多个线程是“并发”的。 多线程vs多进程操... 阅读全文
posted @ 2015-04-17 18:44 zhek 阅读(433) 评论(0) 推荐(0) 编辑