day 30 进程以及使用join验证空间隔离

一 . 操作系统的作用

      (1)隐藏丑陋复杂的硬件接口,提供良好的抽象接口。

      (2)管理,调度进程,并且将多个进程对硬件的竞争变得有序。

二 . 进程

       进程是计算机中的程序关于某数据集合上的一次运动,是系统进行资源分配和调度的基本单位,是操作系统的基础。在早期,进程是程序的基本执行实体,在当代面向线程中,进程是线程的容器,程序是指令,数据以及组织形式的描述,进程是程序的实体,我们自己在python文件中写一些代码,这叫程序,运行这个python文件的时候,这叫进程。从小了来说,进程是正在运行程序的实列,往大了来说,进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。

       进程具有多种形态:动态性,并发性,独立性,异步性,结构特征性

三 . 并发与并行    

       并发:是伪并行,既看起来是同时运行,单个cpu+多道奇数就可以实现并发(并行也属于并发)

       并行:同时运行,只有具备多个cpu才能实现并行(但并发不属于并行)

四 . 同步/异步/阻塞/非阻塞(重点)

       

同步阻塞形式:效率最低,举个例子来说,就是你专心排队,什么别的事都不做

异步阻塞形式:效率比上面高一点,比如在排队取餐的时候,领了一张饭票等着,并且在这段时间里不能干其他的事情,只能坐着等着,不能玩游戏或者做其他的事情。

同步非阻塞形式:效率比前两个都要高一点,但实际上是效率低下的,你一边打电话一边抬头看看队伍排到你了没有。

异步非阻塞形式:效率是最高的,也是比较常用到的,在排队取餐的时候,他可以去干别的事情,告诉老板如果到他了叫他就好了。

 五 . from multiprocess  import  process   (导入创建进程的模块) 进程的两种创建方式,上代码

          

import time
import os
from multiprocessing import Process

def func1():
time.sleep(2)
print("我是func1")

def func2():
time.sleep(2)
print("我是func2")
print("子进程的pid",os.getpid()) # 查看当前进程的id
print("子进程的父进程>>>",os.getppid()) #查看父进程的id

if __name__ == '__main__':
print("主进程的pid",os.getpid())
print("当前主进程的父进程>>>",os.getppid())
start_time = time.time()
p = Process(target=func2,)
p.start() #告诉操作系统,我这边准备好了,你帮我创建并执行这个进程

func1()
end_time = time.time()
dif_time = end_time - start_time
print(">>>",dif_time)


注意:在windows中Process()必须放到# if __name__ == '__main__':下

import time
from multiprocessing import Process
class MyProess(Process):
def __init__(self,n):
super().__init__()
self.n = n
def run(self): # 必须要创建run方法,否则就不会执行,父类里面是pass
time.sleep(2)
print(self.n)

if __name__ == '__main__':
p = MyProess(10)
p.start()

print("主进程结束")


验证空间隔离

import time
from multiprocessing import Process


num = 100
def func1():
global num
time.sleep(1)
num = num - 1
print('>>>>>>>>',num)
# time.sleep(0.02)
# print('来玩啊')
# def func2()

if __name__ == '__main__':

p_list = []
for i in range(10):
p = Process(target=func1,)
p.start()
p.join()
p_list.append(p)

for pp in p_list:
pp.join()
# print(num)
# p.join()
# p.join()

print('主进程的num>>>>>',num)
print('主进程结束')

六 . Process对象的其他方法或属性:terminate和is_alive,name与pid,僵尸进程与孤儿进程,这些虽然不是很重要,但我们还是需要了解的

原文地址:https://www.cnblogs.com/liuteacher/p/10026818.html