博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python之线程
阅读量:6731 次
发布时间:2019-06-25

本文共 853 字,大约阅读时间需要 2 分钟。

JoinableQueue

可以被join的队列

join是等待任务结束

队列怎么叫结束?

​ 调用task_done一次则表示有一个数据被处理完成了 当task_done次数等于put的次数就意味着任务处理完成了

​ 这也是join的执行时机

该队列可以明确告知数据的使用方,所有数据都已经处理完成

在生产者消费者模型中,解决了消费者不知道何时算是任务结束的问题

具体过程:主进程先等待所有的生产者进程生成完毕,再等队列中的数据被全部处理,这就意味着,任务全部结束

 

# 多线程

​ 使用多线程 多进程的目的 是一致 ,都是为了并发执行任务,从而提高效率

​ 什么是线程:

线程是操作系统运算调度的最小单位 (CPU最小执行单位),线程被包含在进程中,一个线程就是一个固定的执行流程 (控制流)

​ 线程的特点:

​ 进程是不能被执行,进程是一个资源单位,其中包含了程序运行所需要的所有资源,

​ 线程才是真正的执行单位,光有进程程序是无法运行的,必须先创建进程将资源加载到进程中,在启动线程来执行任务

​ 一个进程至少包含一个线程,称之为主线程,主线程是由操作系统来开启,

​ 一个进程可以包含多个线程,来提高程序的效率

​ 线程与进程的区别:

​ 线程创建的开销远小于进程

​ 统一进程中的所有线程共享进程内的资源

​ 线程之间没有父子关系,都是平等的,PID相同

如何选择:

​ 要根据具体的任务类型,IO密集 计算密集

 

## 线程的使用方法与进程一模一样

开启线程的位置可以是任何位置

# 守护线程

​ 守护线程会在所有非守护线程结束时一起结束 ,当然守护可以提前结束

# 线程安全问题

​ 并发操作同一个资源 可能导致数据错乱的问题

​ 解决方案: 加互斥锁

​ 互斥锁 mutex

​ 递归锁 Rlock 同一线程可以多次执行acquire()

​ 信号量 semaphore

​ 死锁问题:

​ 不止一个锁,分别被不同线程持有,相互等待对方释放,就会导致锁死问题

转载于:https://www.cnblogs.com/huanghongzheng/p/10979562.html

你可能感兴趣的文章
【C++】const成员函数
查看>>
devenv.exe 应用程序错误
查看>>
词法分析实验报告-201506110151-董广枢
查看>>
【NDK开发】android-ndk r10环境搭建
查看>>
smartUpload上传文件组件
查看>>
Android系统移植与调试之------->build.prop文件详细赏析
查看>>
SOUI更新到2.0
查看>>
网站速度与性能优化要抓主要矛盾解决—瓶颈法
查看>>
clientX,clientY,pageX,pageY,screenX,screenY
查看>>
条件编译
查看>>
Linux命令——mesg
查看>>
Argus
查看>>
自定义UIButton
查看>>
C#函数(四)
查看>>
[日记]游长白遇梅花,植物大战僵尸
查看>>
[激励机制]浅谈内部竞争——如何让你的员工玩命干活?
查看>>
【working_out】时间线
查看>>
C++ 中 volatile 的使用
查看>>
ubuntu下安装jdk
查看>>
Spring MVC - 2 参数传递
查看>>