2013年7月24日

python多线程编程(4): 死锁和可重入锁

摘要: 死锁在线程间共享多个资源的时候,如果两个线程分别占有一部分资源并且同时等待对方的资源,就会造成死锁。尽管死锁很少发生,但一旦发生就会造成应用的停止响应。下面看一个死锁的例子:# encoding: UTF-8import threadingimport timeclass MyThread(threading.Thread): def do1(self): global resA, resB if mutexA.acquire(): msg = self.name+' got resA' print msg ... 阅读全文

posted @ 2013-07-24 16:23 TonyCoolZhu 阅读(317) 评论(0) 推荐(0) 编辑

python多线程编程(3): 使用互斥锁同步线程

摘要: 问题的提出上一节的例子中,每个线程互相独立,相互之间没有任何关系。现在假设这样一个例子:有一个全局的计数num,每个线程获取这个全局的计数,根据num进行一些处理,然后将num加1。很容易写出这样的代码:# encoding: UTF-8import threadingimport timeclass MyThread(threading.Thread): def run(self): global num time.sleep(1) num = num+1 msg = self.name+' set num to '+str(nu... 阅读全文

posted @ 2013-07-24 15:52 TonyCoolZhu 阅读(609) 评论(0) 推荐(0) 编辑

python多线程编程(1): python对多线程的支持

摘要: 在开始之前,首先要了解一下python对多线程的支持。虚拟机层面Python虚拟机使用GIL(Global Interpreter Lock,全局解释器锁)来互斥线程对共享资源的访问,暂时无法利用多处理器的优势。语言层面在语言层面,Python对多线程提供了很好的支持,Python中多线程相关的模块包括:thread,threading,Queue。可以方便地支持创建线程、互斥锁、信号量、同步等特性。thread:多线程的底层支持模块,一般不建议使用。threading:对thread进行了封装,将一些线程的操作对象化,提供下列类:Thread线程类Timer与Thread类似,但要等待一段时 阅读全文

posted @ 2013-07-24 15:37 TonyCoolZhu 阅读(386) 评论(0) 推荐(0) 编辑

python多线程编程(2): 线程的创建、启动、挂起和退出

摘要: 如上一节,python的threading.Thread类有一个run方法,用于定义线程的功能函数,可以在自己的线程类中覆盖该方法。而创建自己的线程实例后,通过Thread类的start方法,可以启动该线程,交给python虚拟机进行调度,当该线程获得执行的机会时,就会调用run方法执行线程。让我们开始第一个例子:# encoding: UTF-8import threadingimport timeclass MyThread(threading.Thread): def run(self): for i in range(3): time.sleep(1) msg = "I 阅读全文

posted @ 2013-07-24 15:36 TonyCoolZhu 阅读(525) 评论(0) 推荐(0) 编辑

多线程的基本概念

摘要: 多线程编程必须理解的一些基本概念,适用于所有编程语言。内容:并发式编程多任务操作系统多线程vs多进程线程安全线程的生命周期线程的类型并发式编程不同的编程范式对软件有不同的视角。并发式编程将软件看做任务和资源的组合——任务之间竞争和共享资源,当资源满足时执行任务,否则等待资源。并发式编程使得软件易于理解和重用,在某些场景能够极大提高性能。多任务操作系统要实现并发,首先需要操作系统的支持。现在的操作系统大部分都是多任务操作系统,可以“同时”执行多个任务。多任务可以在进程或线程的层面执行。进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间。多任务操作系统可以“并发”执行这些进程。线 阅读全文

posted @ 2013-07-24 13:56 TonyCoolZhu 阅读(247) 评论(0) 推荐(0) 编辑

导航