一、进程基础
狭义定义:进程是正在运行的程序的实例(an instance of a computer program that is being executed)。
广义定义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元
1.1、进程和线程的区别
进程是资源分配的最小单位,线程是cpu执行的最小单位
一个程序运行,最少有一个进程
一个进程里最少有一条线程
1.2、进程和程序的区分
程序可以作为一种软件资料长期存在,而进程是有一定生命期的。
程序是永久的,进程是暂时的。
1.3、进程的状态
-就绪态:可以被cpu调度执行了,还没有执行,排着队
-运行态:在cpu中运行,正在运行(如果到了时间片,也会被调度出去,调度出去的程序是就绪态)
-阻塞态:io操作,把数据加载到内存中
二、并发和并行
并发:你在跑步,鞋带开了,停下跑步,系鞋带,系完以后,继续跑步。
在一个时间段内来看,你干了多个事 -----单核下的并发
并行:你在跑步,你用随身听在听着.
同一时刻,在干多个事 -----只有多核才涉及到并行
三、同步异步,阻塞非阻塞
1 同步调用:提交了以后,一直等待结果返回
2 异步调用:提交了以后,返回一个标志,等执行完成后,有消息通知
3 同步,异步:指的是消息通知机制
4 阻塞,非阻塞:程序在等待调用结果的状态
5 同步阻塞:打电话要买书,如果电话没挂,我也一直在等待,
6 同步非阻塞:打电话买书,电话没挂,我一边干别的事,一边听一下电话
7 异步阻塞:打电话买书,电话先挂掉,过一会老板会回回来(回调),老板给回电话的过程一直在等待
8 异步非阻塞:打电话买书,电话先挂掉,过一会老板会回回来(回调),老板给回电话的过程中,在干别的事
四、如何开启多进程
from multiprocessing import Process
import time
def wirte_file(s):
time.sleep(5)
with open(‘a.txt‘, ‘a‘) as f:
f.write(s)
f.write(‘\n‘)
# 在windows中Process()必须放到 if __name__ == ‘__main__‘:下
if __name__ == ‘__main__‘:
time.sleep(5)
# wirte_file()
# 开启多进程的第一个方式
p = Process(target=wirte_file, args=[‘poco is nb‘])
# 执行该进程
p.start()
# 又开了一个进程
p1 = Process(target=wirte_file, args=[‘egon is dsb‘])
# 执行该进程
p1.start()
a.txt文件内容
poco is nb egon is dsb