Day032--Python--操作系统, process进程
多道技术背景:
提高工作效率(充分利用I/O阻塞的时间) (I: input, O: output)
同时执行多个任务
多道技术:
空间复用: 充分利用内存空间
时间复用: 充分利用I/O阻塞时间
空间上的复用:将内存分为几部分,每个部分放入一个程序,这样,同一时间内存中就有了多道程序。
缺点:首先丧失的是安全性,比如你的qq程序可以访问操作系统的内存,这意味着你的qq可以拿到操作系统的所有权限。其次丧失的是稳定性,某个程序崩溃时有可能把别的程序的内存也给回收了,比方说把操作系统的内存给回收了,则操作系统崩溃。
为了解决空间复用上的问题:程序之间的内存必须分割,由操作系统控制。如果内存彼此不分割,则一个程序可以访问另外一个程序的内存。
时间上的复用:当一个程序在等待I/O时,另一个程序可以使用cpu,如果内存中可以同时存放足够多的作业,则cpu的利用率可以接近100%
缺点:程序员A的程序运行10分钟就能够运行结束,程序员B的程序需要运行24小时,如何程序员B的程序先运行,并且程序员B的程序没有任何I\O操作,那么程序员A需要等待24小时之后才能执行,那么这就不太合理了。
为了解决时间出现了分时系统
分时系统:
分时技术: 把处理机的运行时间分成很短的时间片, 按时间片轮流把处理机分配给各联机作业使用.
若某个作业在分配给它的时间片内不能完成其计算, 则该作业暂时中断, 把处理机让给另一作业使用, 等待下一轮时再继续其运行. 由于计算机速度很快, 作业运行轮转得很快, 给每个用户的印象是, 好像他独占了一台计算机. 而每个用户可以通过自己的终端向系统发出各种操作指令, 在充分的人机交互情况下, 完成作业的运行.
具有上述特征的计算机系统称为分时系统, 它允许多个用户同时联机使用计算机. 多用户分时系统是当今计算机操作系统中最普遍使用的一类操作系统.
实时系统:
虽然多道批处理系统能获得较令人满意的资源利用率和系统响应时间, 但却不能满足实时控制与实时信息处理两个应用领域的需求. 于是就产生了实时系统, 即系统能够及时响应随机发生的外部事件, 并在严格的时间范围内完成对该事件的处理.
实时系统在一个特定的应用中常作为一种控制设备来使用.
实时系统可分成两类:
分时——现在流行的PC,服务器都是采用这种运行模式,即把CPU的运行分成若干时间片分别处理不同的运算请求 linux系统
实时——一般用于单片机上、PLC等,比如电梯的上下控制中,对于按键等动作要求进行实时处理
并发: (一个CPU执行多个进程, 进程之间不断切换)
提高了程序的工作效率
两项工作:
1. 进程之间的切换
2. 保护现场, 保留进程执行的进度
并行: (多核,每个核执行一个,同时执行无需切换即并行)
应用多核, 多个任务同时执行
同步: 等待前面的任务执行完毕, 后面的任务才能执行.
异步:排队取号,前面的任务执行时,自己回去处理自己的事,等前面的任务执行完了,叫到自己的号,再过去执行自己的任务.
阻塞: 只等待排队,什么都不干
非阻塞: 可以处理自己的事情,不用干等着
进程:
具有独立功能的程序在某个数据集合上的一次运行活动, 也是操作系统进行资源分配和保护的基本单位.
进程状态的七态模型
1. 新建态(new): 进程被创建, 尚未进入就绪队列.
2. 就绪态(ready): 进程具备运行条件, 等待系统分配处理器.
3. 挂起就绪态(ready suspend): 进程具备运行条件, 但目前在外存中.
4. 运行态(running): 进程占有处理器正在运行.
5. 终止态(exit): 进程达到正常结束点或被其他原因所终止, 下一步将被撤销.
6. 等待态(wait): 又称阻塞态或休眠态. 进程正在等待某个事件完成, 目前不具备运行条件.
7. 挂起等待态(blocked suspend): 进程正在等待某个事件完成, 并且在外存中.
进程的交互:
进程互斥(Mutual Exclusion): 若干进程因相互抢夺独占型资源而产生的竞争制约关系.
进程同步(Synchronization): 为完成共同任务的并发进程基于某个条件来协调其活动, 因为需要在某些位置上排定执行的先后次序而等待,、传递信息或信息所产生的协作制约关系.
查看进程的pid
import os
import time
from multiprocessing import Process def func(pycharm_pid):
print('子进程', os.getpid())
print('父进程', os.getppid())
print('pycharm的pid', pycharm_pid)
time.sleep(10) # 等待10s,防止进程很快结束,可以在此期间看到任务管理器中进程的PID
print('我是func~~~')
def inner():
print('我是inner')
print('子进程', os.getpid())
print('父进程', os.getppid())
def inner2():
print('我是inner2')
print('子进程', os.getpid())
print('父进程', os.getppid())
return inner2()
return inner() def func2():
print('我是func2')
print('父进程的另一个子进程', os.getpid())
time.sleep(10) if __name__ == '__main__':
print('父进程', os.getpid())
pycharm_pid = os.getppid()
p = Process(target=func, args=(pycharm_pid,)) # 创建一个进程
p.start() # 启动这个进程
p1 = Process(target=func2,) # 创建一个进程
p1.start() # 启动这个进程
# 进程启用后会相互抢占内存, 而p和p1进程的启动间隔十分短,所以p和p1无法确定哪个进程会先执行,是完全随机的
Day032--Python--操作系统, process进程的更多相关文章
- python 操作系统和进程
一. 操作系统介绍 多道程序系统 多道程序设计技术 所谓多道程序设计技术,就是指允许多个程序同时进入内存并运行.即同时把多个程序放入内存,并允许它们交替在CPU中运行,它们共享系统中的各种 ...
- Python process (进程)
进程 (process) 进程是对各种资源管理的集合,包含对各种资源的调用.内存的管理.网络接口的调用 进程要操作 CPU 必须先启动一个线程,启动一个进程的时候会自动创建一个线程,进程里的第一个线程 ...
- python中的进程、线程(threading、multiprocessing、Queue、subprocess)
Python中的进程与线程 学习知识,我们不但要知其然,还是知其所以然.你做到了你就比别人NB. 我们先了解一下什么是进程和线程. 进程与线程的历史 我们都知道计算机是由硬件和软件组成的.硬件中的CP ...
- Day9 - Python 多线程、进程
Python之路,Day9, 进程.线程.协程篇 本节内容 操作系统发展史介绍 进程.与线程区别 python GIL全局解释器锁 线程 语法 join 线程锁之Lock\Rlock\信号量 将线 ...
- Python学习--17 进程和线程
线程是最小的执行单元,而进程由至少一个线程组成.如何调度进程和线程,完全由操作系统决定,程序自己不能决定什么时候执行,执行多长时间. 进程 fork调用 通过fork()系统调用,就可以生成一个子进程 ...
- python基础(16)-进程&线程&协程
进程之multiprocessing模块 Process(进程) Process模块是一个创建进程的模块,借助这个模块,就可以完成进程的创建. 介绍 初始化参数 Process([group [, t ...
- python进阶之 进程编程
1.进程 顾名思义,进程即正在执行的一个过程.进程是对正在运行程序的一个抽象. 进程的概念起源于操作系统,是操作系统最核心的概念,也是操作系统提供的最古老也是最重要的抽象概念之一.操作系统的其他所有内 ...
- Python 多线程、进程
本节内容 操作系统发展史介绍 进程.与线程区别 python GIL全局解释器锁 线程 语法 join 线程锁之Lock\Rlock\信号量 将线程变为守护进程 Event事件 queue队列 生产者 ...
- Python 线程和进程和协程总结
Python 线程和进程和协程总结 线程和进程和协程 进程 进程是程序执行时的一个实例,是担当分配系统资源(CPU时间.内存等)的基本单位: 进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其 ...
- Python 操作系统介绍 进程的创建
背景知识 顾名思义,进程即正在执行的一个过程.进程是对正在运行程序的一个抽象. 进程的概念起源于操作系统,是操作系统最核心的概念,也是操作系统提供的最古老也是最重要的抽象概念之一.操作系统的其他所有内 ...
随机推荐
- Python:matplotlib绘制直方图
使用hist方法来绘制直方图: 绘制直方图,最主要的是一个数据集data和需要划分的区间数量bins,另外你也可以设置一些颜色.类型参数: plt.hist(np.random.randn(1 ...
- C#里XML(JSON)序列化时,自动隐藏值为Null的成员的输出
从StackOverflow里找到的答案.发现对最新的Newtownsoft的JSON序列化也同样适用. https://stackoverflow.com/questions/5818513/xml ...
- NC部门考勤月报定制sql
SELECT t_1.pk_psndoc pk_psndoc, t_1.pk_group pk_group, t_1.pyear pyear, t_1.month month, t_1.code ps ...
- vue的 v-for 循环中图片加载路径问题
先看一下产品需求,如下图所示, 产品要求图片和它的名称一一对应,本来是非常简单的需求,后台直接返回图片路径和名称,前台直接读取就可以了,但是我们没有存储图片的服务器,再加上是一个实验性的需求,图片需要 ...
- U68641 划水(swim.pas/c/cpp)
U68641 划水(swim.pas/c/cpp) 题目背景 小小迪带你划水. 题目描述 原题 输入输出格式 输入格式: 第一行一个数 T. 接下来 T 行每行一个数表示 n 输出格式: 输出 T 行 ...
- linux-shell系列2-机器巡检
#!/bin/bash#主机信息每日巡检NETWORK=`ip a|grep 2:|awk -F':' '{print $2}'` IPADDR=$(ifconfig $NETWORK|grep 'i ...
- C# 两个类是否继承关系
IsAssignableFrom:确定指定类型的实例是否可以分配给当前类型的实例 B继承自A static void Main(string[] args) { Type a = typeof(A); ...
- C# int数组转string字符串
方式一:通过循环数组拼接的方式: int[] types = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; string result = string.Empty ...
- 关于工具类中@Autowired注入为NULL的问题记录
记录:在实体类中加入@Component注解和@Autowired注解时Service不能注入成功. @Component //把普通pojo实例化到spring容器中 0 public clas ...
- FAQ常见问题解答---搭建hubot
1. [root@test160 ~]# npm install -g n npm ERR! Error: CERT_UNTRUSTED 证书不受信任的 解决办法: npm config set st ...