进程笔记

背景知识
顾名思义,进程即正在执行的一个过程,进程是对正在运行程序的一个抽象
什么是进程:
进程是计算机中的程序关于某数据集合上的一次运行活动
协议定义:进程是正在云心的程序的实例
广义的定义:进程是一个具有一定独立工能的程序关于数据集合的一次运行活动
进程的特征:
动态性:进程的实质是程序在多道程序系统中的依次执行过程,进程是动态产生,动态消亡的
并发性;任何进程都可以同其他进程一起并发执行
独立性:进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位
异步性:由于进程间的相互制约,是进程具有执行的间断性,即进程按各自独立的,不可预知的熟读向前推进
结构特征;
进程有程序,数据和进程口直快三部分组成
先来先服务调度算法
FCFS 调度算法是一种最简单的调度算法,该算法既可用于作业调度,也可用于进程调度.FCFS算法比较有利于长作业(进程),
而不利于短作业进程。由此可知,本算法适合于CPU繁忙型作业,而不利于I/O繁忙型的作业进程
段作业优先调度算法
短作业进程优先调度算法(SJ/PF)是指对短作业或短进程优先调度的算法,该算法既可用于作业调度,也可用于进程调度.
并发:
是伪并行,即看起来是同事运行,单个CPU+躲到技术就可以实现并发(并行也属于并发)

例子
你是一个cpu,你同时谈了三个女朋友,每一个都可以是一个恋爱任务,你被这三个任务共享要玩出并发恋爱的效果,
应该是你先跟女友1去看电影,看了一会说:不好,我要拉肚子,然后跑去跟第二个女友吃饭,吃了一会说:那啥,我去趟洗手间,然后跑去跟女友3开了个房,然后在你的基友眼里,你就在和三个女友同时在一起玩。
并行
并行;同时运行,只有具备多个CPU才能实现
例子
将多个CPU比喻成高速公路上的多个车道,进程就好比每个车道上行驶的车辆,并行就是说,大家在自己的车道上行驶,会不影响,同时在开车,这就是并行

process模块:
process模块是一个创建进程的模块,借助这个模块,就可以完成进程的创建
Process{group[,target[,name[,args[,kwargs]]]]},有该类实例化得到的对象,表示一个子进程中的任务
强调:
1.需要使用关键字的方式来指定参数
2.arg指定的为传给target函数的位置参数,是一个玉足行驶,必须有逗号

例子
from multiprocessing import Process

def func():
     print(12345)

if __name__ == '__main__': #windows 下才需要写这个,这和系统创建进程的机制有关系,不用深究,记着windows下要写就好啦
     #首先我运行当前这个test.py文件,运行这个文件的程序,那么就产生了进程,这个进程我们称为主进程

    p = Process(target=func,) #将函数注册到一个进程中,p是一个进程对象,此时还没有启动进程,只是创建了一个进程对象。并且func是不加括号的,因为加上括号这个函数就直接运行了对吧。
    p.start() #告诉操作系统,给我开启一个进程,func这个函数就被我们新开的这个进程执行了,而这个进程是我主进程运行过程中创建出来的,所以称这个新创建的进程为主进程的子进程,而主进程又可以称为这个新进程的父进程。
 #而这个子进程中执行的程序,相当于将现在这个test.py文件中的程序copy到一个你看不到的python文件中去执行了,就相当于当前这个文件,被另外一个py文件import过去并执行了。
 #start并不是直接就去执行了,我们知道进程有三个状态,进程会进入进程的三个状态,就绪,(被调度,也就是时间片切换到它的时候)执行,阻塞,并且在这个三个状态之间不断的转换,等待cpu执行时间片到了。
    print('*' * 10) #这是主进程的程序,上面开启的子进程的程序是和主进程的程序同时运行的,我们称为异步
上面说了,我们通过主进程创建的子进程是异步执行的,那么我们就验证一下,并且看一下子进程和主进程的ID号(见一下pid和ppid,使用pycharm举例),来看看是否是父子关系
例子
import time
import os

#os.getpid()  获取自己进程的ID号
#os.getppid() 获取自己进程的父进程的ID号

from multiprocessing import Process

def func():
    print('aaaa')
    time.sleep(1)
    print('子进程>>',os.getpid())
    print('该子进程的父进程>>',os.getppid())
    print(12345)

if __name__ == '__main__':
    #首先我运行当前这个文件,运行的这个文件的程序,那么就产生了主进程

    p = Process(target=func,)
    p.start()
    print('*' * 10)
    print('父进程>>',os.getpid())
    print('父进程的父进程>>',os.getppid())

#加上time和进程号给大家看一看结果:
#********** 首先打印出来了出进程的程序,然后打印的是子进程的,也就是子进程是异步执行的,相当于主进程和子进程同时运行着,如果是同步的话,我们先执行的是func(),然后再打印主进程最后的10个*号。
#父进程>> 3308
#父进程的父进程>> 5916 #我运行的test.py文件的父进程号,它是pycharm的进程号,看下面的截图

#aaaa
#子进程>> 4536
#该子进程的父进程>> 3308 #是我主进程的ID号,说明主进程为它的父进程

#12345

 



posted @ 2018-10-24 16:11  若无过客丶何来人生  阅读(201)  评论(0编辑  收藏  举报