进程部分(IPC机制及生产者消费者模型)和线程部分
进程部分
一:进程间通信IPC机制:由于进程之间的内存空间是相互隔离的,所以为了进程间的通信需要一个共享的内存空间,
但是共享带来的问题是数据在写的时候就不安全了,所以需要一种机制既有能共享的内存
空间,又能解决锁的问题。
有两种解决方案:一种叫管道,另一种叫队列。其中队列就是管道加锁实现的。这两种方式
占用的都是内存空间,但是管道无法解决锁的问题,所以还是要选择队列。例图1:
二:生产者消费者模型:
1:什么是生产者消费者模型:
生产者:代指生产数据的任务
消费者:代指处理数据的任务
该模型的工作方式:生产者生产数据传递给消费者处理
实现方式:生产者把数据放到队列里,然后消费者从队列里取出数据进行处理。
生产者----->队列<------消费者
2:为何要用生产者消费者模型:
当程序中明显的出现两类任务,一类负责生产数据,一类负责处理数据,
就可以引入生产者消费者模型来实现生产者与消费者的解耦合,平衡
生产能力与消费能力,从而提升效率。 例图2:
但是通过以上案例我们可以发现需求实现了,但是程序一直没有结束,原因是消费者还在
等待着从队列中取数据,尽管此时队列已经空了。所以消费者无法结束,那么主进程也无法
结束,所以才导致整个程序一直没有结束。
所以现在需要让消费者在消费完所有生产者生产的数据后,结束运行。
例图3:还有另外一种,例图3了解:
原理都是一样:都是在主进程里面等待生产者生产完数据后,发出结束信号就可以了。
线程部分:线程理论:
1:什么是线程:
进程其实一个资源单位,而进程内的线程才是cpu上的执行单位
线程其实指的就是代码的执行过程
2:为何要用线程: 线程vs进程
①:同一进程下的多个线程共享该进程内的资源
②:创建线程的开销要远远小于进程
开启线程的两种方式:
方式一(图4):通过threading模块,导入类Thread来开启线程,通过类Thread实例化得到对象,
然后调用对象下的start方法,来开启一个线程。 如图4
方式二(图5):通过自定义一个类的方式来开启线程。如图5:
线程对象相关的属性或方法:
1:同一进程下的多个线程共享该进程内的资源 如图6:
2:pid:通过os模块,os模块下有一个os.getpid 如图7:
3:active_count:可以查看线程活跃的个数 如图8:
4:current_thread:可以查看当前线程 如图9:
守护线程(daemon):守护主线程,一旦主线程结束了,那么守护的子线程也直接结束了。 如图10
线程互斥锁:原理:将并发变成串行,牺牲效率,保证数据安全。 如图11:







进程部分(IPC机制及生产者消费者模型)和线程部分的更多相关文章
- 4、网络并发编程--僵尸进程、孤儿进程、守护进程、互斥锁、消息队列、IPC机制、生产者消费者模型、线程理论与实操
昨日内容回顾 操作系统发展史 1.穿孔卡片 CPU利用率极低 2.联机批处理系统 CPU效率有所提升 3.脱机批处理系统 CPU效率极大提升(现代计算机雏形) 多道技术(单核CPU) 串行:多个任务依 ...
- 进程间通信IPC机制和生产者消费者模型
1.由于进程之间内存隔离,那么要修改共享数据时可以利用IPC机制 我们利用队列去处理相应数据 #管道 #队列=管道+锁 from multiprocessing import Queue # q=Qu ...
- python多进程之IPC机制以及生产者消费者模型
1.进程间通信(IPC机制) 第一种:管道 import subprocessres=subprocess.Popen('dir',shell=True, stdout=subprocess.PIPE ...
- IPC机制和生产者消费者模型
IPC机制:(解决进程间的数据隔离问题) 进程间通信:IPC(inter-Process Comminication) 创建共享的进程列队,Queue 是多进程的安全列队,可以使用Queue 实现多进 ...
- 消息队列,IPC机制(进程间通信),生产者消费者模型,线程及相关
消息队列 创建 ''' Queue是模块multiprocessing中的一个类我们也可以这样导入from multiprocessing import Queue,创 建时queue = Queue ...
- Python之网路编程之-互斥锁与进程间的通信(IPC)及生产者消费者模型
一.互斥锁 进程之间数据隔离,但是共享一套文件系统,因而可以通过文件来实现进程直接的通信,但问题是必须自己加锁处理. 注意:加锁的目的是为了保证多个进程修改同一块数据时,同一时间只能有一个修改,即串行 ...
- 进程同步控制(锁,信号量,事件), 进程通讯(队列和管道,生产者消费者模型) 数据共享(进程池和mutiprocess.Pool模块)
参考博客 https://www.cnblogs.com/xiao987334176/p/9025072.html#autoid-1-1-0 进程同步(multiprocess.Lock.Semaph ...
- 4月25日 python学习总结 互斥锁 IPC通信 和 生产者消费者模型
一.守护进程 import random import time from multiprocessing import Process def task(): print('name: egon') ...
- python_way ,day11 线程,怎么写一个多线程?,队列,生产者消费者模型,线程锁,缓存(memcache,redis)
python11 1.多线程原理 2.怎么写一个多线程? 3.队列 4.生产者消费者模型 5.线程锁 6.缓存 memcache redis 多线程原理 def f1(arg) print(arg) ...
随机推荐
- vue cli 3.0创建项目
.npm i -g @vue/cli .vue create my-project 此处有两个选择: 1.default (babel, eslint)默认套餐,提供babel和eslint支持 2. ...
- 2种方式解决vue路由跳转未匹配相应路由避免出现空白页面或者指定404页面
https://www.cnblogs.com/goloving/p/9254084.html https://www.cnblogs.com/goloving/p/9254084.html 1.路由 ...
- ReLU激活函数的缺点
训练的时候很”脆弱”,很容易就”die”了,训练过程该函数不适应较大梯度输入,因为在参数更新以后,ReLU的神经元不会再有激活的功能,导致梯度永远都是零. 例如,一个非常大的梯度流过一个 ReLU 神 ...
- C++ 用三元组表示法存储稀疏矩阵
若有一个矩阵(m*n),其中非0元素个数远少于数值为0的元素个数,若开辟一个m*n大空间,来存储这样一个很多元素值为0的矩阵,浪费空间,于是我们只存储这些非0的元素的下标及数值 用一个结构体——三元组 ...
- 一起ORA-00028案例的处理过程
前言 最近客户在测试新系统A时,遭遇ORA28,回话被终止的问题. 先了解一下大致环境,系统A由系统B通过rman还原恢复,应用程序已经在系统B跑批通过,现在系统A上遇到下面问题. 应用程序报错如下 ...
- linux上的图片查看器FEH_image_view
Linux上的图片查看器, 简单,没有多余功能,打开快速,体积小 在终端用feh # 直接执行feh显示当前目录所有图片 feh # 或者指定图片名 feh pic1 pic2 pic3 # 显示一个 ...
- 【论文速读】ChengLin_Liu_ICCV2017_Deep_Direct_Regression_for_Multi-Oriented_Scene_Text_Detection
ChengLin Liu_ICCV2017_Deep Direct Regression for Multi-Oriented Scene Text Detection 作者 关键词 文字检测.多方向 ...
- idea用到的快捷键
之前一直用的eclipse,早就听说idea更智能,更便捷,于是,下载了idea,然后再破解,现在就慢慢抛弃eclipse,平时就用idea进行编码. idea的快捷键与eclipse还是有较大不同, ...
- [转载]URI、 URL 和 URN 的区别
1. URI URI = Universal Resource Identifier 统一资源标志符 URI采用一种特定语法标识一个资源的字符串.所标识的资源可能是服务器上的一个文件.不过,也可能是一 ...
- html2canvas截屏用法
<!DOCTYPE html><html lang="en"><head> <meta charset="utf-8" ...