并发编程
2019-09-09 10:11:53 1 举报
AI智能生成
并发编程
作者其他创作
大纲/内容
线程
什么是线程
线程vs进程
开启线程的两种方式
利用python模块
自定义类
线程vs进程的代码对比
线程的相关其他方法
守护线程
互斥锁
死锁现象
可重复锁RLock
信号量
GIL
验证计算密集型IO密集型的效率
多线程实现socket通信
操作系统
操作系统的定义
操作系统是存在于硬件与软件之间,管理,协调,控制软件与硬件的交互.
操作系统的作用:
1:将一些丑陋复杂的硬件操作封装成美丽的接口,便于使用.
2: 多个进程抢占一个资源时,合理的调度分配多个进程与cpu的关系,让其有序化,
2: 多个进程抢占一个资源时,合理的调度分配多个进程与cpu的关系,让其有序化,
操作系统的发展史
第一代电子计算机(1940~1955)
二战时期,推出的电子计算机 手工操作.预定.类似于插线板的程序,计入机房,一个人独资享有计算机2个小时,各种硬件的操作插线与你的程序结合.
特点: 没有操作系统的概念,所有的硬件连接都是自己完成.
优点: 一个人独享.
缺点:一个人享用浪费资源.
所有的程序都是串行处理.
特点: 没有操作系统的概念,所有的硬件连接都是自己完成.
优点: 一个人独享.
缺点:一个人享用浪费资源.
所有的程序都是串行处理.
第二代计算机:磁带存储,批处理系统.(1955~1965)
优点: 节省了程序员连接个硬件的操作的时间.
缺点:不能独享计算机,不能在程序运行时修复bug.
cpu还是串行处理.
缺点:不能独享计算机,不能在程序运行时修复bug.
cpu还是串行处理.
第三代计算机,集成电路,多道程序系统.
第三代计算机解决一个问题: 人工中途参与磁盘传递工作,以及输入输出设备不同机的问题.
第三代计算机解决第二个问题: 多道技术.
第三代计算机解决第二个问题: 多道技术.
多道技术
多道技术要求物理层面实现进程之间内存的隔
多道技术解决了什么:
时间上的复用 将串行变为并发
空间上的复用.一个内存允许加载多个进程.
阻塞; IO阻塞,recv, accept, read input,write, sleep等等,都是阻塞.
如果三个进程全部都没有IO阻塞,多道技术就会影响最终的效率.
多道技术解决了什么:
时间上的复用 将串行变为并发
空间上的复用.一个内存允许加载多个进程.
阻塞; IO阻塞,recv, accept, read input,write, sleep等等,都是阻塞.
如果三个进程全部都没有IO阻塞,多道技术就会影响最终的效率.
进程
程序是什么?
程序就是一堆文件.
进程是什么?
进程就是一个正在执行的文件/程序,抽象的概念.
进程被谁执行?
# 操作系统调度作用.将你的磁盘上的程序加载到内存,然后交由CPU去处理.一个cpu正在运行的一个程序,就叫开启了一个进程.
串行 并发 并行 阻塞 非阻塞
串行: 所有的进程由cpu一个一个的解决.
并发:单个cpu,同时执行多个进程(来回切换的),看起来像是同时运行.
并行:多个cpu,真正的同时运行多个进程.
阻塞:遇到IO才叫阻塞.
非阻塞: 没有IO.
进程3个状态 运行 就绪 阻塞
并发:单个cpu,同时执行多个进程(来回切换的),看起来像是同时运行.
并行:多个cpu,真正的同时运行多个进程.
阻塞:遇到IO才叫阻塞.
非阻塞: 没有IO.
进程3个状态 运行 就绪 阻塞
创建进程过程
开启一个进程
利用python中模块Process类创建
第2种 自己定义一个类
小陷阱 注意子进程会copy主空间
进程之间的空间隔离
进程其他属性(进程pid)
进程对象join方法
进程的三个状态?
5.什么是进程?请简述进程的三个状态?(2分)
在运⾏中的程序就是进程
进程是计算机中最⼩的资源分配单位
进程的三状态 :就绪 运⾏ 阻塞
8.进程之间如何进⾏通信?(2分)
可以通过原⽣socket通信
如果是在同⼀个进程中,也可以使⽤multiprocessing⾃带的pipe或者queue进⾏通信
也可以使⽤第三⽅⼯具:memcache、、kafka、rabbitmq
在运⾏中的程序就是进程
进程是计算机中最⼩的资源分配单位
进程的三状态 :就绪 运⾏ 阻塞
8.进程之间如何进⾏通信?(2分)
可以通过原⽣socket通信
如果是在同⼀个进程中,也可以使⽤multiprocessing⾃带的pipe或者queue进⾏通信
也可以使⽤第三⽅⼯具:memcache、、kafka、rabbitmq
liunx中的僵尸孤儿 守护
互斥锁
队列
基于队列的生产者消费者模型
进程池,线程池
什么是池
# 要在程序开始的时候,还没提交任务先创建固定数量的进程或线程 放在一个池子里,这就是池
为什么要用池?
# 如果先开好进程/线程,那么有任务之后就可以直接使用这个池中的数据了
# 并且开好的线程或者进程会一直存在在池中 处理完毕进程并不关闭,可以被多个任务反复利用
# 这样极大的减少了开启\关闭\调度线程/进程的时间开销
# 池中的线程/进程个数控制了操作系统需要调度的任务个数,控制池中的单位
# 有利于提高操作系统的效率,减轻操作系统的负担
# 并且开好的线程或者进程会一直存在在池中 处理完毕进程并不关闭,可以被多个任务反复利用
# 这样极大的减少了开启\关闭\调度线程/进程的时间开销
# 池中的线程/进程个数控制了操作系统需要调度的任务个数,控制池中的单位
# 有利于提高操作系统的效率,减轻操作系统的负担
开启一个池
回调函数
阻塞非阻塞同步异步
0 条评论
下一页