线程

比如一个软件有几个功能,当我们运行这个软件的时候,cpu会开辟一个空间,这就是进程;当你运行他的几个功能的时候,又会在进程里开辟空间,这就是线程。
同一个进程里的线程是并发执行的,就是轮流抢占cpu。
像比较耗时的,要下载的操作我们用线程,因为比如你下载多个图片,不可能下一个就开辟一个内存,会把电脑卡死;爬虫就是用的线程。像计算量大的就用进程
线程的状态:
当我们创建一个线程对象(t = threading.Thread()),此时为新建状态;t.start()后进入就绪状态,即此线程在等待cpu调用它;进入到cpu后,变为运行状态;但是,如果只有一个线程,即没有其它想线程抢占cpu,运行完后进入结束状态,如果没有运行完,线程让出cpu,此时为阻塞状态,又进入就绪状态排队,并不会回到运行状态。
如果是多个线程,就要争cpu,运行顺序不能确定。
线程可以共享变量,即每个线程都可对全局变量进行操作。像抢票加速包,用多个线程去抢票,票就可作为共享变量。
运算量比较小的时候,python底层只要用线程就会默认加解释器锁,即只要不释放锁,其他线程就无法进入运行状态,则不是真的多线程。
当运算量达到某一量时,上面说的锁就会释放,会造成共享数据混乱,A线程正在对共享数据进行操作,还没操作完就被B线程抢占,再对其操作,出现取值错误的问题。
如何解决?用线程同步来解决,在线程中加入锁Lock,引入锁不把结果打印,不让出cpu。
这样运行速度就会变慢

使用Thread对象的Lock和Rlock可以实现简单的线程同步,这两个对象都有acquire方法和release方法,
对于每次只允许一个线程操作的数据,可以将其操作放到acquire和release方法之间
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值