进程: 正在进行的一个过程或者说一个任务.而负责执行任务的是cpu.
同一个程序执行两次,那也是两个进程,比如打开暴风影音,虽然都是同一个软件,但是一个可以播放天空之城,一个可以播放七龙珠
无论是并行还是并发,在用户看来都是‘同时‘运行的,不管是进程还是线程,都只是一个任务而已,真是干活的是cpu,cpu来做这些任务,而一个cpu同一时刻只能执行一个任务
串行: 所有的进程由cpu一个一个的解决
并发: 单个cpu,同时执行多个进程(多道技术),看起来像是同时运行
并行: 多个cpu,真正的同时运行多个进程
对于通用系统(跑很多应用程序),需要有系统运行过程中创建或撤销进程的能力,主要分为四种形式创建新的进程
新进程的创建都是由一个已经存在的进程执行了一个用于创建进程的系统调用而创建的:
python中,如果一次想开启多个进程,必须是一个主进程,开启多个子进程
# 开启进程的2种方式
# 第一种方式
from multiprocessing import Process
import time
def task(name):
print(f'{name} is running')
time.sleep(9)
print(f'{name} is done')
if __name__ == '__main__': # windows必须在main下开启多进程
p = Process(target=task, args=('子进程',)) # args一定是一个元组
p.start() # 通知操作系统在内存种开辟一个空间,将p这个进程放进去,让cpu执行
print('===>主进程')
----------------------------------------------------
# 第二种方式
from multiprocessing import Process
import time
class MyProcess(Process):
def __init__(self, name):
super().__init__() # 必须继承父类的init
self.name = name
def run(self): # 必须是run
print(f'{self.name} is running')
time.sleep(9)
print(f'{self.name} is done')
if __name__ == '__main__':
p = MyProcess('子进程')
p.start()
print('===>主进程')
关于创建的子进程,UNIX和windows
执行程序A,开启一个子进程,执行程序B,开启另外一个子进程,两个进程之间基于管道‘|‘通讯,将A的结果作为B的输入.进程B在等待输入(即I/O)时的状态称为阻塞,此时B命令都无法运行
其实在两种情况下会导致一个进程在逻辑上不能运行
一个进程有三种状态:
进程并发的实现在于,硬件中断一个正在运行的进程,把此时进程运行的所有状态保存下来,为此,操作系统维护一张表格,即进程表(process table),每个进程占用一个进程表项(这些表项也称为进程控制块),该表存放了进程状态的重要信息: 程序计数器、堆栈指针、内存分配状况、所有打开文件的状态、帐号和调度信息,以及其他在进程由运行态转为就绪态或阻塞态时,必须保存的信息,从而保证该进程在再次启动时,就像从未被中断过一样.
原文:https://www.cnblogs.com/zyyhxbs/p/11228095.html