进程和线程的使用问题
一. 对进程线程怎么理解/说说进程线程的差异
他们的意义: 充分利用CPU的多核资源,同时处理多个应用程序任务,以此提高程序的运行效率。
进程 : 程序在计算机中的一次运行。
(程序是一个可执行的文件,是静态的占有磁盘)
进程是一个动态的过程描述,占有计算机运行资源,有一定的生命周期。
进程的三态:
就绪态 : 进程具备执行条件,等待分配cpu资源
运行态 : 进程占有cpu时间片正在运行
等待态 : 进程暂时停止运行,让出cpu
线程:
【1】 线程被称为轻量级的进程
【2】 线程也可以使用计算机多核资源,是多任务编程方式
【3】 线程是系统分配内核的最小单元
【4】 线程可以理解为进程的分支任务
线程特征
【1】 一个进程中可以包含多个线程
【2】 线程也是一个运行行为,消耗计算机资源
【3】 一个进程中的所有线程共享这个进程的资源
【4】 多个线程之间的运行互不影响各自运行
【5】 线程的创建和销毁消耗资源远小于进程
【6】 各个线程也有自己的ID等特征
区别联系:
- 两者都是多任务编程方式,都能使用计算机多核资源
- 进程的创建删除消耗的计算机资源比线程多
- 进程空间独立,数据互不干扰,有专门通信方法;线程使用全局变量通信
- 一个进程可以有多个分支线程,两者有包含关系
- 多个线程共享进程资源,在共享资源操作时往往需要同步互斥处理
- 进程线程在系统中都有自己的特有属性标志,如ID,代码段,命令集等。
二. 进程间通信知道哪些,有什么特点
管道 消息队列 共享内存 信号 信号量 套接字
- Queue用于多个进程间实现通信,Pipe是两个进程的通信
- 共享内存:在内中开辟一块空间,进程可以写入内容和读取内容完成通信,但是每次写入内容会覆盖之前内容。
- 信号量(信号灯集):给定一个数量对多个进程可见。多个进程都可以操作该数量增减,并根据数量值决定自己的行为。
参考博客:
https://www.cnblogs.com/maplethefox/p/10989182.html
Queue消息队列: 在内存中建立队列模型,进程通过队列将消息存入,或者从队列取出完成进程间通信。
Queue() q.put() q.get()
三. 什么是同步互斥,你什么情况下使用,怎么用
线程同步互斥方法
-
线程 Event
from threading import Event
e = Event()-----------创建线程event对象
e.wait([timeout])—阻塞等待e被set
e.set()-----------------设置e,使wait结束阻塞
e.clear() --------------使e回到未被设置状态
e.is_set()--------------查看当前e是否被设置 -
线程锁 Lock
from threading import Lock
lock = Lock() -------------创建锁对象
lock.acquire() -----------上锁 如果lock已经上锁再调用会阻塞
lock.release() ------------解锁
with lock:-----------------上锁
with-------------------- ----代码块结束自动解锁