python——进程原理
1.什么是进程
进程就是正在运行的程序,或者说是程序运行的过程,是个抽象的概率。而负责执行任务则是cpu,
2.进程与程序的区别
程序就是一堆代码,进程是程序运行的过程
3.进程的创建
新进程的创建都是由一个已经存在的进程执行了一个用于创建进程的系统调用而创建的:
1. 在UNIX中该系统调用是:fork,fork会创建一个与父进程一模一样的副本,二者有相同的存储映像、同样的环境字符串和同样的打开文件(在shell解释器进程中,执行一个命令就会创建一个子进程)
2. 在windows中该系统调用是:CreateProcess,CreateProcess既处理进程的创建,也负责把正确的程序装入新进程。
unix创建进程接口:fork
windows创建进程接口是:creactprocess
开启子进程是把父进程的数据拷贝一份给子进程,用来当子进程运行时候的全局变量
强调:
1.相同的是:进程创建后,父进程和子进程有各自不同的地址空间(多道技术要求物理层面实现进程之间内存的隔离),任何 一个进程的在其地址空间中的修改都不会影响到另外一个进程。
不同的是;
unix是子进程的初始数据是父进程的一个完整副本(子进程和父进程只能只读共享内存区,相当于快照,数据共享,子进程修改数据不会修改影响父进程)
windows初始的时候就是两个不同的内存地址(拷贝数据与父进程数据是有点不一样的)
并发与并行
并发:是伪并行,即看起来是同时运行。单个cpu+多道技术就可以实现并发,(并行也属于并发)
二 并行:同时运行,只有具备多个cpu才能实现并行
单核下,可以利用多道技术,多个核,每个核也都可以利用多道技术(多道技术是针对单核而言的)
有四个核,六个任务,这样同一时间有四个任务被执行,假设分别被分配给了cpu1,cpu2,cpu3,cpu4,
一旦任务1遇到I/O就被迫中断执行,此时任务5就拿到cpu1的时间片去执行,这就是单核下的多道技术
而一旦任务1的I/O结束了,操作系统会重新调用它(需知进程的调度、分配给哪个cpu运行,由操作系统说了算),可能被分配给四个cpu中的任意一个去执行
进程的状态
其实在两种情况下会导致一个进程在逻辑上不能运行,
1. 进程挂起是自身原因,遇到I/O阻塞,便要让出CPU让其他进程去执行,这样保证CPU一直在工作
2. 与进程无关,是操作系统层面,可能会因为一个进程占用时间过多,或者优先级等原因,而调用其他的进程去使用CPU。
运行:正在被cpu执行
阻塞:遇到io
就绪:io完了,等待向操作系统申请使用cpu
运行-阻塞:遇到io操作
阻塞-就绪:io操作完成,才有资格向操作系统申请调用cpu
就绪-运行:向操作系统申请到cpu
运行-就绪;运行时间过长或有优先级高的进程被强行切走cpu权限