程序是一个没有生命的实体,它包含许多由程序设计语言编写的、但未被执行的指令,这些指令经过编译和执行才能完成指定动作。

程序被执行后成为了一个活动的实体,这个实体就是进程。换言之,操作系统调度并执行程序,这个“执行中的程序”称为进程。进程是操作系统进行资源分配和调度的基本单位。

在Windows操作系统下使用组合键Ctrl+Alt+Delete打开任务管理器,单击任务管理器窗口中的“进程”选项卡查看计算机中所有的进程,如图1所示。

图1 任务管理器中的进程

每个应用程序都有一个自己的进程,每个进程都在内存中占据一定空间,一般情况下,进程占据的内存空间由控制块、程序段和数据段三个部分组成,各部分的介绍如下。

(1) 控制块(Proscessing Control Block,PCB):系统为管理进程专门设置的数据结构,常驻于内存中,用于记录进程的外部特征与进程的运动变化过程。控制块是进程存在的唯一标志。

(2) 程序段:用于存放程序执行代码的一块内存区域。

(3) 数据段:存储变量和进程执行期间产生中间或最终数据的一块内存区域。

随着外界条件的变化,进程的状态会发生变化。在五态模型中,进程有新建态、就绪态、运行态、阻塞态和终止态这五个状态,关于这些状态的介绍如下:

(1) 新建态。创建进程,申请一个空白的控制块,向该控制块中填写控制和管理进程的信息,完成资源分配。

(2) 就绪态。进程具备运行条件,等待系统分配处理器资源以便运行。

(3) 运行态。进程占用处理器资源正在运行。

(4) 阻塞态。进程不具备运行条件,正在等待某个事件(如I/O操作或进程同步)的完成,否则无法继续运行。

(5) 终止态。进程因出现错误或被系统终止而运行结束。

除了以上五种状态之外,进程还有一个挂起态。挂起态是一种主动行为,它是在计算机内存资源不足、处理器空闲、用户主动挂起、系统检查资源使用情况等条件下将进程暂时调离出内存形成的,在条件允许时可再次被调回内存。与挂起态相比,阻塞态是一种被动行为,它是在等待事件或者获取不到资源而引发的等待表现。

为了帮助大家理解,下面通过一张图来描述进程状态间的转换关系,具体如图2所示。

图2 进程状态的切换

图2中描述的切换过程如下:

无→新建:当程序从存储设备加载到内存中时,进程进入新建态。

新建→就绪:处于新建态的进程会被调度器自动转换为就绪态,获得了所需的资源,这个过程是非常短暂的。

就绪-→运行:当处于就绪态的进程获取CPU后进入运行态,CPU开始执行这个进程的命令。

运行→阻塞:当处于运行态的进程因出现资源不足(I/O或缓冲区申请失败等)等事件而终止运行,进入阻塞态。

阻塞→就绪:当处于阻塞态的进程获得了等待的资源后恢复为就绪态。

阻塞→挂起:当处于阻塞态的进程遇到诸如处理器空闲、资源不足等情况时而调离内存,进入挂起态。进程的内存数据会保存到磁盘中,以释放空间供其它进程使用。

挂起→就绪: 当处于挂起态的进程遇到系统资源充足或主动请求激活时,进入就绪态。

运行→终止:当处于运行态进程执行完成或者被操作系统终止时,它会从内存中被移除,变为“终止”状态。

进程具有以下一些特点:

动态性。进程是程序的一次执行过程,它是动态产生、动态消亡的。

并发性。多个进程可并发执行。

独立性。进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位。

异步性。进程之间的相互制约使得进程的执行具有间断性,它们按各自独立的、不可预知的速度向前推进。

本文来自千锋教育,转载请注明出处。

什么是进程?Python进程各部分内容介绍相关推荐

  1. 初步理解Python进程的信号通讯

    Reference: http://www.jb51.net/article/63787.htm 信号的概念 信号(signal)--     进程之间通讯的方式,是一种软件中断.一个进程一旦接收到信 ...

  2. python的用途实例-python进程池作用展示及实例解析

    在以下的文章之中我们来了解一下什么是python中的进程池.了解一下python进程池的相关知识,以及进程池在python编程之中能起到什么样的作用. 进程池 Pool类描述了一个工作进程池,他有几种 ...

  3. python进程、线程的学习心得

    什么是多线程竞争? 线程不是独立的,同一个进程里的线程,线程间的数据是共享的,多线程操作时,容易造成数据的混乱,线程不安全. 如何解决? 互斥锁. 好处:能够保证某段关键代码执行时,只有一个线程操作, ...

  4. python -- 进程

    什么是进程 要了解进程先了解操作系统,可以参考一下我的上一篇博客:操作系统 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基 ...

  5. python进程共享全局变量 时延_Python 进程之间共享数据(全局变量)的方法

    进程之间共享数据(数值型): import multiprocessing def func(num): num.value=10.78 #子进程改变数值的值,主进程跟着改变 if __name__= ...

  6. Python 进程 Process 与线程 threading 区别 - Python零基础入门教程

    目录 一.Python 线程 threading 创建 二.Python 进程 Process 创建 三.Python 进程 Process 和线程 threading 区别 四.Python 进程 ...

  7. python进程与线程_Python进程与线程知识

    Python培训分享进程与线程知识,Python开发语言现在已经是被大家非常看中的编程语言了,本篇文章给读者们分享一下Python进程与线程知识小结,本篇文章具有一定的参考借鉴价值,感兴趣的小伙伴来了 ...

  8. python——进程基础

    我们现在都知道python的多线程是个坑了,那么多进程在这个时候就变得很必要了.多进程实现了多CPU的利用,效率简直棒棒哒~~~ 拥有一个多进程程序: 1 #!/usr/bin/env python ...

  9. python进程池win出错_解决windows下python3使用multiprocessing.Pool出现的问题

    例如: from multiprocessing import Pool def f(x): return x*x pool = Pool(processes=4) r=pool.map(f, ran ...

最新文章

  1. 业务库负载翻了百倍,我做了什么来拯救MySQL架构?
  2. 20-ESP8266 SDK开发基础入门篇--C# TCP客户端编写 , 加入数据通信
  3. buu [GKCTF2020]小学生的密码学
  4. 打造微量元素产业-丰收节交易会·李喜贵:签约南国健康产业
  5. VS Code运行C和C++程序
  6. python 输出颜色的设置
  7. 冒泡排序java代码_美团面试,我竟然输给了冒泡排序。。。
  8. keyshot分辨率多少合适_分辨率单位及换算详解
  9. java+log4j+是异步吗_log4j2用asyncRoot配置异步日志是如何使用disruptor
  10. python熊猫弹幕_python奇闻杂技05 爬虫初步学习+jieba分词+词云库+哔哩哔哩弹幕爬取示例(数据分析pandas)...
  11. 通过AT指令将air202 接入阿里云
  12. oracle minus连接条件,oracle及sqlserve中MINUS 的使用方法
  13. 8月第2周基金排行榜 | TokenInsight
  14. 单纯同调与奇异同调 习题
  15. 小学数学奥林匹克试题集锦 bt
  16. Python教程(十)--if 实例运用(棒子老虎鸡游戏)
  17. 分享宝贵的考研心得, 做到这些,考研无惧暗箱操作!
  18. Android软键盘手动显示、隐藏、布局上移和EditText上移
  19. android eventlog监听,Android EventLog总结
  20. 如何把软件卸载得更彻底

热门文章

  1. 最长公共子序列LCS
  2. 【Linux部署】Greenplum数据库6.13.0单机版【重启实录】(5次报错问题及解决的避坑指南+日志文件查看方法)
  3. Springboot集成cache的key生成策略
  4. Spring-Bean依赖注入(引用数据类型和集合数据类型)
  5. 使用spring boot+shiro+jwt+mybatis-plus搭建项目框架
  6. C#——《C#语言程序设计》实验报告——Windows桌面编程
  7. Spring Boot——控制台LOGO自定义配置管理解决方案
  8. Linux——CentOS安装桌面
  9. Increasing Subsequence (easy version)
  10. Steps to One