线程
定义:一个程序运行起来之后,一定有个负责执行代码的东西,这个东西就叫线程。线程占用的资源比较少,操作系统调度的单位。
t = threading.Thread(target=dance) 创建线程实例 t.start() 启动线程,在这里会出现一个子线程
threading.enumerate() 打印当前所有线程,返回一个列表【】
总结:
- 完成多任务,需要用threading模块来创建多线程来实现,还可以用继承Thread类的形式来创建线程(里面必须定义run方法)。
- 可以查看正在运行的线程名称
- 主线程会在子线程均结束后才停止。
- 调用start后,会出现一个子线程。
资源竞争—互斥锁解决
多线程可以共享全局变量,同时操作全局变量,可能会出现资源竞争的问题。
互斥锁Lock的acquire,release可以解决资源竞争的问题。
死锁:两个线程互相等待对方释放资源时,就会造成死锁。可以用设置等待时间来避免
线程的常用应用:多任务聊天器,或者多个while true同时执行
多线程是假的多任务。
GIL:全局解释器锁,每个线程在执行的过程中均需要先获取到GIL,保证同一时刻只有一个线程可以执行代码。
python和GIL锁没有半毛钱关系,是历史原因cpython解释器造成的,cpython无法移出GIL锁
python释放GIL的情况,在io操作时,是可以暂时释放的,然后在执行完毕后,必须重新获取gil。所以多线程比单线程性能上是有提升的,因为遇到io阻塞会自动释放GIL的。
python使用多进程是可以利用多核的cup资源。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。