进程部分

一:进程间通信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机制及生产者消费者模型)和线程部分的更多相关文章

  1. 4、网络并发编程--僵尸进程、孤儿进程、守护进程、互斥锁、消息队列、IPC机制、生产者消费者模型、线程理论与实操

    昨日内容回顾 操作系统发展史 1.穿孔卡片 CPU利用率极低 2.联机批处理系统 CPU效率有所提升 3.脱机批处理系统 CPU效率极大提升(现代计算机雏形) 多道技术(单核CPU) 串行:多个任务依 ...

  2. 进程间通信IPC机制和生产者消费者模型

    1.由于进程之间内存隔离,那么要修改共享数据时可以利用IPC机制 我们利用队列去处理相应数据 #管道 #队列=管道+锁 from multiprocessing import Queue # q=Qu ...

  3. python多进程之IPC机制以及生产者消费者模型

    1.进程间通信(IPC机制) 第一种:管道 import subprocessres=subprocess.Popen('dir',shell=True, stdout=subprocess.PIPE ...

  4. IPC机制和生产者消费者模型

    IPC机制:(解决进程间的数据隔离问题) 进程间通信:IPC(inter-Process Comminication) 创建共享的进程列队,Queue 是多进程的安全列队,可以使用Queue 实现多进 ...

  5. 消息队列,IPC机制(进程间通信),生产者消费者模型,线程及相关

    消息队列 创建 ''' Queue是模块multiprocessing中的一个类我们也可以这样导入from multiprocessing import Queue,创 建时queue = Queue ...

  6. Python之网路编程之-互斥锁与进程间的通信(IPC)及生产者消费者模型

    一.互斥锁 进程之间数据隔离,但是共享一套文件系统,因而可以通过文件来实现进程直接的通信,但问题是必须自己加锁处理. 注意:加锁的目的是为了保证多个进程修改同一块数据时,同一时间只能有一个修改,即串行 ...

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

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

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

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

  9. python_way ,day11 线程,怎么写一个多线程?,队列,生产者消费者模型,线程锁,缓存(memcache,redis)

    python11 1.多线程原理 2.怎么写一个多线程? 3.队列 4.生产者消费者模型 5.线程锁 6.缓存 memcache redis 多线程原理 def f1(arg) print(arg) ...

随机推荐

  1. weblogic的基础安装

    安装java环境 不能使用centos自带的openjdk  必须使用源码安装 把下载的jdk-8u181-linux-x64.tar 解压到 /usr/src目录下      tar zxvf jd ...

  2. Mac对gdb签名

    codesign -f -s gdb-cert $(which gdb) gdb_cert为自己创建的证书名 添加证书信任 activity-monitor双击taskgated 关闭 gdb成功运行

  3. MongoDB基本信息

    一.MongoDB简介 来源:在2007年,由纽约一个叫10gen的创业团队开发,公司现在叫做MongoDB Inc,最初被开发为PAAS(平台即服务). 数据库类型:基于分布式文件存储的数据库.由C ...

  4. [COCI11-12 #4]删数游戏(贪心+数据结构)

    题目描述 题目描述 给出一个N位数字串,删除任意K位,使剩下的数最大.. 输入 第1行:2个整数N和K(1<=K<=N<=500000) 第2行:N个数字(可能为0) 输出 第1行: ...

  5. echarts 图的点击事件(含:点击重复触发的问题及其解决方法)

    今天用echarts的时候发现一个问题 鼠标指向不同地市触发一个事件展示该地区趋势图  但是但是后台中不管我第几次鼠标指向都会触发两次指向事件 现在贴出解决办法: 问题完美解决.但是为什么会调用两次, ...

  6. 记自己利用hexo和github搭建个人博客的过程

    --------------------------------------可能我书写的方式跟别人顺序不一样,但这是我的成功经验------------------------------------ ...

  7. JVM进程启动会启动哪些线程?

    首先要明白一点:JVM本身是一个多线程的程序,和我们编写的java应用程序一样,当JVM启动执行时就是在操作系统中启动了一个JVM进程.我们编写的java单线程或多线程应用进程都是在JVM这个程序中作 ...

  8. 小程序 components 下的组件引入字体图标时样式不生效

    在组件内的样式在引入一遍 字体图标样式, pages 下的组件不受影响,全局引入字体图标样式即刻,不需要再次引入

  9. 小米手机跨域问题,返回resphone:undefined,status 0

    小米手机跨域问题,返回resphone:undefined,status 0我小米note2的手机登录不上,返回resphone:undefined,status 0 我手机登录不了的问题解决了,后台 ...

  10. console.log在IE浏览器中会有异常

    因为在IE浏览器无此方法,故此重写 方法一: var console = console || { log: function () { return false; } }; 方法二:window.c ...