2

线程

定义:一个程序运行起来之后,一定有个负责执行代码的东西,这个东西就叫线程。线程占用的资源比较少,操作系统调度的单位。

t = threading.Thread(target=dance) 创建线程实例
t.start() 启动线程,在这里会出现一个子线程

threading.enumerate() 打印当前所有线程,返回一个列表【】

总结:

  1. 完成多任务,需要用threading模块来创建多线程来实现,还可以用继承Thread类的形式来创建线程(里面必须定义run方法)。
  2. 可以查看正在运行的线程名称
  3. 主线程会在子线程均结束后才停止。
  4. 调用start后,会出现一个子线程。

资源竞争—互斥锁解决
多线程可以共享全局变量,同时操作全局变量,可能会出现资源竞争的问题。
互斥锁Lock的acquire,release可以解决资源竞争的问题。

死锁:两个线程互相等待对方释放资源时,就会造成死锁。可以用设置等待时间来避免

线程的常用应用:多任务聊天器,或者多个while true同时执行

多线程是假的多任务。

GIL:全局解释器锁,每个线程在执行的过程中均需要先获取到GIL,保证同一时刻只有一个线程可以执行代码。

python和GIL锁没有半毛钱关系,是历史原因cpython解释器造成的,cpython无法移出GIL锁

python释放GIL的情况,在io操作时,是可以暂时释放的,然后在执行完毕后,必须重新获取gil。所以多线程比单线程性能上是有提升的,因为遇到io阻塞会自动释放GIL的。

python使用多进程是可以利用多核的cup资源。


樱桃小丸子
27 声望1 粉丝