码迷,mamicode.com
首页 > 编程语言 > 详细

python第九天(9-34)

时间:2019-02-05 11:45:18      阅读:204      评论:0      收藏:0      [点我收藏+]

标签:url   产生   解释   print   range   lock   多线程   mic   osc   

技术图片

一:并行,并发概念

  • 并发:指系统具有操作多个任务的能力
  • 并行:指形同具有同时操作多个任务的能力
  • 并行可以看作是并发的子集

二:同步,异步概念

  • 同步:所谓同步,就是发出一个功能调用时,在没有得到结果之前,该调用就不返回或不继续执行后续操作-------就是等
  • 个人理解:当程序出现阻塞++++++++++++    的时候,一直等到阻塞结束
  • 异步:当一个异步过程调用发出后,调用者在没有得到结果之前,就可以继续执行后续操作
    • 个人理解:当程序处于阻塞的时候,就去执行其他的操作,等到阻塞结束,再回来

技术图片

一: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     lock.acquire()#对资源进行枷锁
 3     global num
 4     temp=num
 5     time.sleep(0.0001)
 6     num=temp-1
 7     lock.release()#对资源释放锁
 8 if __name__=="__main__":
 9     import threading, time
10     num=100
11     thread=[]
12     lock = threading.Lock()
13     for i in range(100):
14         i=threading.Thread(target=minus)
15         thread.append(i)
16         i.start()
17     for t in thread:#让主线程等待子线程完毕再执行
18         t.join()
19     print(num)
同步锁实例
不加同步锁的解析
1.再没有time.sleep的时候程序结果为0
2.但在加入time.sleep时会发现随时间的不一样,答案也不一样
    time.sleep(1):99
3.时间一样,但每次结果也不一样
     time.sleep(0.001):88 84 89.....

4.猜想:当遇到sleep时,cpu就会切换线程去执行,当sleep时间刚好切换过100此线程之后,又开始执行这100个线程的最后一步,导致结果为100
         当遇到sleep不够切换100次线程时,第一个线程先开始temp=100,遇到sleep切换到第二个线程,第二个线程temp也为100,但当第二次切换线程时,有可能去到第一个线程去执行第二部,
      这样就会出现这种情况
以上为个人理解

----------------------------------------------------------------------------------------------------

三:同步锁理解:对于加锁部分,不会出现线程的切换,从而产生的效果是加锁部分是串行执行的

python第九天(9-34)

标签:url   产生   解释   print   range   lock   多线程   mic   osc   

原文地址:https://www.cnblogs.com/Mr-l/p/10352545.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!