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设计模式第六天【原型模式】
1.定义 使用原型模式复制的对象与原来对象具有一样的结构和数据,有浅克隆和深克隆 2.应用场景 (1)希望复制原来对象的结构和数据胆步影响原来对象 3.代码实现 #!/usr/bin/env pyth ...
- QTP 自动化测试桌面程序--笔记(关闭 启动程序脚本) 、安装
0 安装qtp .exe 文件 安装 插件文件(如delph) 1 关闭 启动程序: 将要操作的程序-存入localdatatable中 设置 迭代一次 rem SystemUtil.ClosePro ...
- css的类选择器
css的类选择形式 .类名{} 通配类选择器:*.类名{} 某种元素的类选择器:元素名.类名{} 多类选择器:<p class="css1 css2"></p& ...
- 扩展运算符(spread)是三个点(…)
扩展运算符(spread)是三个点(…),将一个数组||类数组||字符串转为用逗号分隔的序列. js中用来对数组进行操作,把数组里面的东西统统拿出来 一.展开数组 //展开数组 let a = [1, ...
- jaxp的dom方式操作(查找、添加、修改、删除、遍历节点)
package cn.itcast.jaxptest; import java.io.IOException; import javax.xml.parsers.DocumentBuilder;imp ...
- Java拦截器
拦截器,主要用于拦截前端请求,常用于登录检查. 下面是演示使用拦截器拦截未登录的用户访问需要登录的模块情景,使用配置方式实现和注解方式实现代码: 配置方式: 1.web.xml中配置监听器,对于所有的 ...
- JarvisOJ BASIC 德军的密码
已知将一个flag以一种加密形式为使用密钥进行加密,使用密钥WELCOMETOCFF加密后密文为 000000000000000000000000000000000000000000000000000 ...
- MySQL的my.cnf文件(解决5.7.18下没有my-default.cnf)
官网说:从5.7.18开始不在二进制包中提供my-default.cnf文件.参考:https://dev.mysql.com/doc/refman/5.7/en/binary-installatio ...
- java zip API实现压缩和解压缩zip包
package zip; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io ...
- Mysql 千万级别数据数据查询
1.构建数据 --创建MyISAM模式表方便批量跑数据 CREATE TABLE `logs1` ( `id` int(11) NOT NULL AUTO_INCREMENT, `logtype` v ...