1、多线程与多进程的应用范围和join方法
2、死锁与递归锁
3、信号量
4、Event
5、定时器
6、线程Queue
1多线程与多进程的引用范围和join方法
#多线程优点是开销小缺点是不能利用多核适用于I/O操作 #多进程优点利用多核缺点开销大适用于计算操作 #window平台开进程开销大,鼓励大家多开线程,因此window平台的多线程学习重点是要大量面对资源争抢与同步方面的问题。 #linux平台开进程开销小,鼓励大家多开进程,因此linux平台的多进程学习重点是要学习进程间的通讯的方法。
#join方法可以解决竞争,保证数据安全问题。但是它把并行的程序变成了串行,影响效率。所以这个方法不可取。
''' 多进程 优点:可以利用多核 缺点:开销大 多线程 优点:开销小 缺点:不可以利用多核 ''' # #计算密集型要开启多进程 # from multiprocessing import Process # from threading import Thread # import time # def work(): # res=0 # for i in range(10000000): # res+=i # # if __name__ == '__main__': # l=[] # start=time.time() # for i in range(4): # p=Process(target=work) #3.9822275638580322运行时间 # # p=Thread(target=work) #6.686382293701172运行时间 # l.append(p) # p.start() # # for p in l: # p.join() # # stop=time.time() # print('%s' %(stop-start)) #I/O密集型要开启多线程 # from multiprocessing import Process # from threading import Thread # import time # def work(): # time.sleep(2) # # if __name__ == '__main__': # l=[] # start=time.time() # for i in range(400): # # p=Process(target=work)#42.643439292907715运行时间 # p=Thread(target=work)#2.0871193408966064运行时间 # l.append(p) # p.start() # # for p in l: # p.join() # # stop=time.time() # print('%s' %(stop-start))
2死锁与递归锁
#这种情况下回产生死锁
from threading import Lock,Thread import time mutexA=Lock() mutexB=Lock() class MyThread(Thread): def run(self): self.f1() self.f2() def f1(self): mutexA.acquire() print('