进程

1.多任务

一个cpu同时做好多事情就叫做多任务

2.时间片轮转

每个进程被分配一个时间段,称作它的时间片,即该进程允许运行的时间

3.优先调度

系统的进程会比开发者开发的优先调度

4.并发

在多核系统里面,同时执行多个进程,一般情况下会有些进程没有机会执行,这种情况就是并发

5.并行

在多核系统里面,同时执行多个进程吗,这些进程都有机会执行

6.进程的创建

进程:正在运行的代码叫进程

程序:没有运行的代码叫程序

--1.fork()

python中的os模块封装了常用的系统调用其中就包括fork()可以在python程序中创建子进程

进程_第1张图片
进程_第2张图片

说明:

程序执行到os.fork()时,操作系统会创建一个新的额进程(子进程),然后复制主进程的所有信息到子进程中

然后主进程和子进程都会从fork()函数中得到一个返回值,在子进程中这个值一定是0,而主进程中是子进程的ID号

在Linux操作系统中,提供了一个fork()系统函数,它非常特殊

普通的函数调用,调用一次,返回一次,但是fork()调用一次,返回2次,因为操作系统自动把当前进程复制了一份,然后,分别在子进程和主进程内返回。

子进程永远返回0,而主进程返回子进程的ID

这样做的理由是,一个主进程可以fork很多子进程,所以,主进程要记下每个子进程的ID,而子进程只需要调用getppid()就可以拿到主进程的ID

7.getpid()和getppid()

进程_第3张图片
进程_第4张图片
进程_第5张图片

8.进程与进程之间数据不共享

import os

import time

num = 0

pid = os.fork()

if pid == 0:

i = 0

while i < 5:

print("当前子进程,num==%d"%num)

num += 1

time.sleep(1)

i += 1

else:

i = 0

while i < 5:

print("当前主进程,num==%d"%num)

time.sleep(2)

num += 1

i += 1


运行结果:

当前主进程,num==0

当前子进程,num==0

当前子进程,num==1

当前主进程,num==1

当前子进程,num==2

当前子进程,num==3

当前主进程,num==2

当前子进程,num==4

当前主进程,num==3

当前主进程,num==4

说明:

多进程中,每个进程中所有数据都各拥有一份,互不影响

9.多次fork()问题

进程_第6张图片
进程_第7张图片

10.进程的创建-multiprocessing

由于python是跨平台的,自然也应该提供一个跨平台的多进程

使用process创建子进程:


进程_第8张图片
进程_第9张图片

主进程等待process子进程结束:

进程_第10张图片
进程_第11张图片

multiprocessing模块提供了一个Process类来代表一个进程对象

join等待子进程结束

进程_第12张图片
进程_第13张图片

说明:

创建子进程时,只需要传入一个执行函数和函数的参数,创建一个process实例,用start()方法启动,这样创建进程比fork()还要简单。

join()方法可以等待子进程结束后再继续往下运行,通常用于进程间的同步。

你可能感兴趣的:(进程)