| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Python知识库 -> python 线程详解 -> 正文阅读 |
|
[Python知识库]python 线程详解 |
1、什么是线程? 线程:操作系统提供的抽象概念,是程序执行中一个单一的顺序控制流程,是程序执行流的最小单元,是处理器调度和分派的基本单位。一个进程可以有一个或多个线程,同一进程中的多个线程将共享该进程中的全部系统资源,如虚拟地址空间,文件描述符和信号处理等等。 2、python如何实现多线程? python通常使用threading模块实现多线程,导入threading包,然后对象名= threading.Thread(target = 函数名) 创建线程对象,最后对象名.start() 创建线程。主要的线程方法:run(): 用以表示线程活动的方法;start():启动线程活动;join([time]): 等待至线程中止。 https://docs.python.org/zh-cn/3.8/library/threading.html?highlight=threading#module-threading 3、实现多线程?
4、全局解释器锁? 全局解释器锁(GIL)只允许1个Python线程控制Python解释器。这也就意味着同一时间点只能有1个Python线程运行。如果你的Python程序只有一个线程,那么全局解释器锁可能对你的影响不大,但是如果你的程序是CPU密集型同时使用了多线程,那么程序运行可能会受到很大影响。 Python为了能够支持多线程,而解决多线程之间数据完整性和状态同步的最简单方法就是加锁,所以在python创立之初默认加上了GIL。 具体可以参考:https://zhuanlan.zhihu.com/p/361695757 但是在python当中,当计算强度不高时,GIL默认会加上,但是当计算强度比较大的时候,GIL又会释放,下面两个例子说明。 (1)当计算强度不高时,由于有锁,所以数据并不会出错
(2)当计算强度高时,锁被释放,所以数据出错
5、线程同步(加锁) 多线程的可以共享主线程的数据,在操作的时候可能会存在数据不同的问题解决办法是,加锁,锁 是控制多个线程对共享资源进行访问的工具。通常,锁提供了对共享资源的独占访问,每次只能有一个线程对 Lock 对象加锁,线程在开始访问共享资源之前应先请求获得 Lock 对象。当对共享资源访问完成后,程序释放对 Lock 对象的锁定。 Python?的 threading 模块引入了锁(Lock)。threading 模块提供了 Lock 和 RLock 两个类,它们都提供了如下两个方法来加锁和释放锁:
Lock 和 RLock 的区别如下:
对线程进行加锁之后,计算结果就不会出错了?
6、死锁 所谓死锁: 是指两个或两个以上的进程或线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程 在线程间共享多个资源的时候,如果两个线程分别占有一部分资源并且同时等待对方的资源时,就会造成死锁。尽管死锁很少发生,但一旦发生就会造成应用的停止响应。 造成死锁的代码:
利用超时时间避免死锁:
|
|
|
上一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/15 1:20:05- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |