进程指的是一个正在进行/运行的程序,进程是用来描述程序执行过程的虚拟概念
进程的概念起源于操作系统,进程是操作系统最核心的概念,操作系统其它所有的概念都是围绕进程来的
并发:多个任务看起来是同时运行的
串行:一个任务完完整整的运行完毕,才能运行下一个任务
多道技术:(两大技术点)
1,空间上的复用:多个任务复用内存空间
2.时间上的复用:多个任务复用cpu时间
①一个任务占用cpu时间过长会被操作系统强行剥夺走cpu的执行权限:反而会降低效率
②一个任务遇到io操作会被操作系统强行剥夺走cpu的执行权限:比起串行执行可以提升效率
ps:复用=》共享/共用
开启进程有两种方式
方式一:
方式二:
join方法 :先让子进程运行
进程之间内存空间的相互隔离
进程之间的内存是一种物理隔离的状态,相互之间的数据是无法共享的
进程对象其他相关的属性或方法
getpid 是获取id getppid就是获取父进程的id 当前的获取的是 pycharm的进程id
僵尸进程与孤儿进程
僵尸进程是有害的,一个进程产生了子进程 而这个子进程完成了自己的事情退出了,但是这个进程只管生产子进程,那么系统运行一段时间后 就会存在很多僵死进程,这些僵死进程仍在系统中运行
孤儿进程 就是把生产子进程的进程杀死后 生产出来的子进程就会成为孤儿进程 那么就会被init接管 定期的进行清除
守护进程
守护进程就是 一旦父进程死亡 子进程马上跟着结束
一:守护进程会在主进程代码执行结束后就终止
二:守护进程内无法再开启子进程,否则抛出异常:AssertionError: daemonic processes are not allowed to have children
进程之间是互相独立的,主进程代码运行结束,守护进程随即终止
p.daemon一定要在p.start()前设置,设置p为守护进程,禁止p创建子进程,并且父进程代码执行结束,p即终止运行
互斥锁
进程之间是不共享数据的,如果在同一个文件上访问没有问题,但是进行操作就会错乱,所以就要用到互斥锁
加锁能够帮助我们让多个进程同时访问一个文件,同一时间只能有一个任务可以修改,就相当于串行的修改,虽然速度变慢 但是保障了数据的安全性