一:并行,并发概念
- 并发:指系统具有操作多个任务的能力
- 并行:指形同具有同时操作多个任务的能力
- 并行可以看作是并发的子集
二:同步,异步概念
- 同步:所谓同步,就是发出一个功能调用时,在没有得到结果之前,该调用就不返回或不继续执行后续操作-------就是等
- 个人理解:当程序出现阻塞++++++++++++ 的时候,一直等到阻塞结束
- 异步:当一个异步过程调用发出后,调用者在没有得到结果之前,就可以继续执行后续操作
- 个人理解:当程序处于阻塞的时候,就去执行其他的操作,等到阻塞结束,再回来
一:GIL
- 首先需要明确的一点是GIL并不是Python的特性,它是在实现Python解析器(CPython)时所引入的一个概念
- 即全局解释器所(global interpreter lock),每个线程在执行时候都需要先获取GIL,保证同一时刻只有一个线程可以执行代码,即同一时刻只有一个线程使用CPU,也就是说多线程并不是真正意义上的同时执行
二:任务分类
- IO密集型任务:python的多线程是有意义的
- 计算密集型任务:不适合python
GIL一篇文章:https://blog.csdn.net/weixin_41594007/article/details/79485847
一:同步锁
通常被用来实现对共享资源的同步访问,为每一个共享资源创建一个Lock对象,当你需要访问该资源时,调用acquire()方法来获取锁对象(如果其他线程已经获得了该锁,则当前线程需要等待其被释放),待资源访问完后,在调用release方式释放锁
二:代码实例解析
1 def minus(): 2 global num 3 temp=num 4 #time.sleep(0.005) 5 num=temp-1 6 7 if __name__=="__main__": 8 import threading,time 9 num=100 10 thread=[] 11 for i in range(100): 12 i=threading.Thread(target=minus) 13 thread.append(i) 14 i.start() 15 for t in thread:#让主线程等待子线程完毕再执行 16 t.join() 17 print(num)同步锁例子