zoukankan      html  css  js  c++  java
  • 进程笔记

    背景知识
    顾名思义,进程即正在执行的一个过程,进程是对正在运行程序的一个抽象
    什么是进程:
    进程是计算机中的程序关于某数据集合上的一次运行活动
    协议定义:进程是正在云心的程序的实例
    广义的定义:进程是一个具有一定独立工能的程序关于数据集合的一次运行活动
    进程的特征:
    动态性:进程的实质是程序在多道程序系统中的依次执行过程,进程是动态产生,动态消亡的
    并发性;任何进程都可以同其他进程一起并发执行
    独立性:进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位
    异步性:由于进程间的相互制约,是进程具有执行的间断性,即进程按各自独立的,不可预知的熟读向前推进
    结构特征;
    进程有程序,数据和进程口直快三部分组成
    先来先服务调度算法
    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


  • 相关阅读:
    Docker部署LAMP项目
    Linux学习4-部署LAMP项目
    Docker环境安装
    Python数据库读写
    Python读取和写入Excel文件数据
    Python读取和写入txt,csv文件数据
    Linux学习1-软件测试从业者的高频Linux命令
    Docker的基础命令
    TurtleBot3 MODEL的相应说明
    ROS2 SLAM(同时定位和地图绘制)
  • 原文地址:https://www.cnblogs.com/liurenli/p/9844090.html
Copyright © 2011-2022 走看看