1、操作系统
位于硬件与应用软件之间,本质也是一种软件,由系统内核和系统接口组成
和进程之间的关系是:
进程只能由操作系统创建
和普通软件区别:
操作系统是真正的控制硬件
应用程序实际在调用操作系统提供的接口
主要功能:
1. 封装了繁琐的硬件操作,为应用程序提供简单的接口
2.将应用程序对硬件的竞争变成有序的使用
2、多道技术
为了解决同一时间只有一个应用程序被执行问题
实现原理:
空间复用:同一时间在内存中存放多个应用程序
时间复用:多个进程占用CPU同一时间片在不同的进程中相互切换, 遇到IO操作或占用CPU时间过长时,保存当前进程状态,切换到其他进程
强调:
多个进程之间相互独立,并是物理层面的隔离,以保证安全性
好处:
同一时间可以多个应用程序在执行,实现并发,在IO操作比较多时,极大的提高效率
弊端:
如果没有IO操作,切换反而会降低效率
应用程序的执行取决于IO操作,IO操作越多则效率越低
提高效率: 减小IO操作,避免被操作系统切换
3、进程与程序
进程:正在运行的程序,是一系列程序执行过程的总称
程序:一段代码,程序员将自己思维逻辑按照某种编程语言规范编写下来的一堆字符串
进程是由程序产生的,没有程序就没有进程
4、进程的三种状态
5、PID和PPID
import os
os.getpid(), 当前进程id
os.getppid(),当前进程的父进程id
6、进程的层次结构
无论是unix还是windows,进程只有一个父进程,不同的是:
1. 在unix所有的进程,都是以init进程为根,成树形结构。
2. 在window中,没有进程层次的概念,所有进程的地位相同,在创建进程时,父进程会得到一个特殊令牌(句柄),
该句柄可以控制子进程,但父进程可以把该句柄传给其他子进程。
7、python中实现多进程
7.1 实现的两种方式
print(name)
p.start()
print("主")
from multiprocessing import Process
def __init__(self, name):
super(MyProcess, self).__init__()
self.name = name
print(self.name)
p = MyProcess('sun')
p.start()
7.2 进程之间的内存相互隔离
import time
x=1000
def task():
time.sleep(3)
global x
x=0
print('子进程',x)
print('main', x)
p=Process(target=task)
p.start()
print(x)
输出结果:
main 1000
子进程 0
1000
7.3 进程的方法和属性
start(),向操作系统发送一个开子进程信号
join(),使主进程等待子进程执行完毕后才会执行,本质是内部修改子进程优先级高于主进程
terminate(), 向操作系统发送一个终止子进程信号,发完之后继续执行
is_alive(), 获取进程的存活状态
p.name, 在创建时可以给进程取名字
p.exitcode, 获取进程的退出码 只有进程完全结束后才能获取到
p.pid # 获取进程的pid