进程基础

1:操作系统

  多道操作系统

    有多个程序在操作系统中运行

    当一个程序遇到IO操作的时候就把CPU让出来给其他程序使用

  分时操作系统

    时间片

    不是遇到IO操作时让出CPU,而是时间到了就让出CPU

    切换程序需要时间,单纯的分时系统没有提高CPU的利用率,但是提高了用户的使用体验

  实时系统

  个人计算机操作系统

  分布式操作系统

2:进程基础

  进程 Process id  = pid

  程序,进程   进程就是运行中的程序

  pycharm pid :pid 是全系统中唯一对某个进程的标识:

     并且随着程序的重启,pid是会改变的

  进程是操作系统中最小的资源分配单位

  进程与进程之间的数据是隔离的 

  进程调度:

    先来先服务 FCFS

    短作业优先算法

    时间片轮转法

    多级反馈队列 算法

  同步:一个程序执行完毕再执行下一个程序

  异步:同时执行多个程序

  同步阻塞:不能充分利用CPU

  异步阻塞:过度利用CPU

  IO多路复用 :比较完善的在网络编程中的解决方案

3:启用进程:

  

import os
import time
import multiprocessing

def count():
    for i in range(10):
        time.sleep(0.5)
        print('子进程',os.getpid(),os.getppid())
if __name__ == '__main__':  #只是在windows上必须写
    print('主进程',os.getpid(),os.getppid())
    p = multiprocessing.Process(target=count).start()
    for i in range(10):
        time.sleep(0.3)
        print('*'*i)

  给子进程传参:

  

import os
import time
import multiprocessing
def count(arg):
    for i in range(10):
        time.sleep(0.5)
        print('子进程%s'%arg,os.getppid(),os.getppid())
if __name__ == '__main__':
    print('主进程',os.getpid(),os.getppid())
    p = multiprocessing.Process(target=count,args=(123456,)).start()
    for i in range(10):
        time.sleep(0.3)
        print('*'*i)

  进程之间的数据隔离的

  

import os
import time
import multiprocessing
number = 100
def count():
    global number
    for i in range(100):
        time.sleep(0.1)
        number -= 1
        print('子进程:',number)
if __name__ == '__main__':
    print('主进程',os.getpid(),os.getpid())
    p = multiprocessing.Process(target=count).start()
    # time.sleep(2)
    # print('主进程:',number)
    for i in range(100):
        time.sleep(0.2)
        print('主进程:',number)

  启用多个进程

import os
import multiprocessing
def count(arg):
    print('子进程%s:'%arg,os.getpid(),os.getppid())
if __name__ == '__main__':
    for i in range(10):
        p = multiprocessing.Process(target=count,args=(i,)).start()

  子进程与父进程之间的关系

  

import os
import time
import multiprocessing
def count(arg):
    print('子进程%s:'%arg,os.getpid(),os.getppid())
    time.sleep(5)
    print('子进程end')
if __name__ == '__main__':
    for i in range(10):
        p = multiprocessing.Process(target=count,args=(i,)).start()
    print('父进程**********')

  1.父进程与子进程的启动时异步的

  父进程只负责通知操作系统启动子进程

  接下来的工作有操作系统接手,父进程继续运行

  2.父进程执行完毕之后并不会直接结束程序

  而是等待所有的子进程都执行完毕之后才结束]

  父进程要负责回收子进程的资源

原文地址:https://www.cnblogs.com/lijinming110/p/9669692.html