进程部分

一:进程间通信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:

   

  

       

       

   

   

转载于:https://www.cnblogs.com/duanxiangyang/p/9599884.html

进程部分(IPC机制及生产者消费者模型)和线程部分相关推荐

  1. 进程同步控制(锁,信号量,事件), 进程通讯(队列和管道,生产者消费者模型) 数据共享(进程池和mutiprocess.Pool模块)...

    参考博客 https://www.cnblogs.com/xiao987334176/p/9025072.html#autoid-1-1-0 进程同步(multiprocess.Lock.Semaph ...

  2. 4月25日 python学习总结 互斥锁 IPC通信 和 生产者消费者模型

    一.守护进程 import random import time from multiprocessing import Processdef task():print('name: egon')ti ...

  3. 进程锁、事件、进程队列、进程间共享数据、生产者消费者模型

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 进程锁(Lock) 锁的基本概念 锁的基本用法 模拟12306抢票软件 信号量:Semaphone 概念 Semaphore ...

  4. 用java智能锁远程,从生产者-消费者模型了解线程、同步、锁(java)

    代码主要包括4个类和1个测试类: 1.Egg 类: 鸡蛋,可以由生产者放入到篮子中,供消费者消费食用. 2.Blanket 类:一个篮子,最多能装5个鸡蛋. 3.Producer 类: 生产者(可以有 ...

  5. 多线程-生产者-消费者模型

    一.前言 生产者消费者问题(英语:Producer-consumer problem),也称有限缓冲问题(英语:Bounded-buffer problem),是一个多线程同步问题的经典案例.该问题描 ...

  6. 三种方式实现生产者-消费者模型

    前言 生产者消费者问题(英语:Producer-consumer problem),也称有限缓冲问题(英语:Bounded-buffer problem),是一个多线程同步问题的经典案例.该问题描述了 ...

  7. python 全栈开发,Day39(进程同步控制(锁,信号量,事件),进程间通信(队列,生产者消费者模型))...

    昨日内容回顾 python中启动子进程 并发编程 并发 :多段程序看起来是同时运行的 ftp 网盘 不支持并发 socketserver 多进程 并发 异步 两个进程 分别做不同的事情 创建新进程 j ...

  8. 进程 互斥锁、队列与管道、生产者消费者模型

    目录 1.互斥锁 2.队列与管道 3.生产者消费者模型(Queue) 4.生产者消费者模型(JoinableQueue) 1.互斥锁 首先导入Lock模块 实例化一把锁 但是每次生成子进程的时候都会重 ...

  9. IPC生产者与消费者模型加线程

    共享内存方式(IPC进程间通信) 一个进程在内存中就是对应着一块独立的内存空间 进程间通信的方式: 1.管道:只能单向通讯,数据都是二进制 2.文件:在硬盘上创建共享文件 优点:数据量无限制 缺点:传 ...

  10. java-线程安全问题,线程实现线程同步,线程状态,等待唤醒机制,生产者消费者模型

    目录标题 解决线程安全问题手段:线程同步 实现同步操作步骤 1.同步代码块 2.同步方法 静态同步方法 3.Lock接口的锁机制 线程状态 生产者消费者模型:等待唤醒 等待唤醒案例 线程安全问题是不能 ...

最新文章

  1. R语言数据包自带数据集之survival包的lung数据集字段解释、数据导入实战
  2. MySQL 查询重复数据,删除重复数据保留id最小的一条作为唯一数据
  3. 定义一个接口CanFly,描述会飞的方法public void fly();
  4. HDU - 7029 Median 思维
  5. Java LocalDate类| lengthOfYear()方法和示例
  6. python列表对应元素合并为列表及判断一个列表是几维
  7. SQLite和NPoco的数据库初始化器
  8. 记录下qcharts绘制曲线遇到的坑
  9. 科学计算机复杂公式计算公式,超级公式计算器
  10. 用matlab辨识系统,Matlab系统辨识工具箱
  11. 状态压缩dp(状压dp)
  12. 音乐彩灯控制器C语言程序,基于单片机的LED彩灯控制器
  13. 设置边框大小html,css border-width属性设置边框宽度
  14. 如何用WPS表格生成拟合曲线
  15. 15个在线网站检测工具
  16. 如何实现可多人协作的“在线excel”系统?
  17. 【渝粤教育】电大中专Windows操作系统 (2)_1作业 题库
  18. LDO的基础特性——热关断
  19. 记录一次线上Mysql数据库迁移方案制定与实施
  20. 实体-关系图转换为关系模型

热门文章

  1. 在 RHEL 和 CentOS 上检查或列出已安装的安全更新的两种方法
  2. Linux软件包管理神器--YUM
  3. 【贪心】hdu5969 最大的位或
  4. 详解CATransformLayer
  5. apache 网页301重定向、自定义400/403/404/500错误页面
  6. 检查服务产生的core文件并做短信处理(shell)
  7. WINDOWS上svn服务器自动部署
  8. 主流JS框架中DOMReady事件的实现
  9. 让在vc6创建的程序中,控件可以随xp风格的改变而变化,不用再程序中添加代码来自己实现~...
  10. CentOS7安装MySQL及常用指令