Python--10、线程
线程
每个进程里都有一个控制线程,进程不是一个执行单位,线程是执行单位,进程是资源单位(资源隔离)。
进程下可以开多个线程,多线程共享进程内的资源。
创建线程的速度比创建进程的速度快,因为创建线程不需要再申请内存空间申请资源等。进程间完全独立,一个进程内的线程资源共享。
#进程之间是竞争关系,线程之间更多的是协作关系。
多线程
进程内除了控制线程,还有别的线程即为多进程。
多线程共享一个进程的地址空间。
开启多线程的两种方式:
- threading模块的Thread方法。
t=Tread(target=module,args=...) t.start()
t.join()\ - 自己定义一个类,继承Thread方法。
自己继承重新封装一下init方法。
#多个线程的PID是一样的。内存空间是共享的。
为了防止资源竞争抢占,也需要加互斥锁
使用方式与进程使用一样。
GIL
cpython所独有的。全局解释器锁,互斥锁。 \
启动时,会先加载解释器的C代码,再加载执行python文件的代码,把执行文件代码当做参数传给C代码,由C代码来执行。
每启动一个进程,除了主线程,解释器还会启动一个垃圾回收线程。
弃用的数据,被垃圾回收线程和用户线程同时要支配这个数据。会矛盾,所以需要锁住解释器的代码。
python的线程不会有并行的情况。
#python利用多核要依靠多进程 。
守护线程
和守护进程的区别:
进程内多个线程时,主线程结束条件是非主线程+守护线程之外的线程都结束后主线程才算结束。
死锁与递归锁
死锁:1拿到了A锁,要拿B锁,2拿着B锁要拿A锁,于是就死锁了。
递归锁:每次被acquire计数就+1
,release一次计数器就减1,为0是其他线程才能强。
用一个计数的方式,实现可以不断acquire,知道计数器被release释放为0其他线程才能去强。
信号量
threading模块的semaphore方法。
sm = semaphore(5)
with sm:
#或者acquire release调用
在有N多个线程时,控制同一时间有多少线程在运行。与线程池不同。\
线程池
threadpoolexcept方法,用法与进程池一样,默认的最大线程池是CPU核数的5倍。
其中的map方法,参数(函数,量)
多XX,XX池应用场景
多XX,特别小规模
XX池,在问题规模还在可控范围内时使用。\
定时器
threading模块下的timer方法,参数(数字,函数,多久后执行)
线程queue
queue模块,queue.Queue(),队列 LifoQueue后进入先出,堆栈 PriorityQueue 优先级队列。数字越小优先级越高。(优先级,数据)
事件
event,有isset方法、wait方法、set方法、clear方法
并发编程需要掌握
- 开进程,开线程
- 生产者消费者模型**
- GIL全局解释器锁,与,用户自定义的互斥锁
- 进程池、线程池 --回调机制
最新文章
- 4.JAVA之GUI编程事件监听机制
- Oauth2.0认证---授权码模式
- 学习总结 初步了解HTML课程
- Java应用短信猫
- React组件的生命周期各环节运作流程
- 用批处理文件自动备份文件及文件夹,并自动删除n天前的文件
- 如何通过Visual Studio来管理我们的数据库项目
- JAVA 发送邮件代码---发送文本内容: 内容使用\n 进行换行
- smarty的学习计划(2)
- java的字符串操作和for循环的使用
- Hadoop2.0 HA集群搭建步骤
- vim各种编码设置问题
- 17.Odoo产品分析 (二) – 商业板块(10) – 电子商务(1)
- 异常小结:上一张图搞清楚Java的异常机制
- LNMP环境的搭建(yum)方法(精)
- 剑指Offer 26. 二叉搜索树与双向链表 (二叉搜索树)
- Unity中物体碰撞后去掉相互之间的反弹力
- Docker技术入门与实战 第二版-学习笔记-6-仓库
- CASE WHEN 及 SELECT CASE WHEN的用法(写了一坨烂代码发现两条sql就行了, 哎)
- 【Spring】Spring MVC文件上传--整合bootstrap-fileinput和jQuery-File-Upload
热门文章
- 单例模式(C#实现)
- Codeforces Round #249 (Div. 2) 总结
- 如何用Bugzilla系统管理产品研发过中相关需求和bug
- springboot整合dubbo的简单案例
- ScrollView双击图片定点放大
- Oracle Multitenant Environment (二) Purpose
- ZOJ 3675 Trim the Nails(bfs)
- 当你买了一辆全车搭载Android操作系统的某侠电动汽车以后
- Unity3D开发——LeRunning的人物角色信息的显示
- JavaSE学习笔记--Item1 注解Annotation