区分python中的进程与线程


Posted in Python onAugust 13, 2020

今天整理的文章是给大家梳理Python的进程与线程的区别,没什么代码,希望大家能清楚知道他们的区别,什么情况用线程,什么情况用进程做到心中有数,希望大家能熟练掌握.

进程的基本概念

概念

进程就是一个程序在一个数据集上的一次动态执行过程。进程一般由程序、数据集、进程控制块三部分组成。我们编写的程序用来描述进程要完成哪些功能以及如何完成;数据集则是程序在执行过程中所需要使用的资源;进程控制块用来记录进程的外部特征,描述进程的执行变化过程,系统可以利用它来控制和管理进程,它是系统感知进程存在的唯一标志。

线程的基本概念

概念

线程是进程中执行运算的最小单位,是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。

好处

  • 易于调度。
  • 提高并发性,通过线程可方便有效地实现并发性。进程可创建多个线程来执行同一程序的不同部分。
  • 开销少,创建线程比创建进程要快,所需开销很少

进程的基本状态及状态之间的关系

状态:运行、阻塞、挂起阻塞、就绪、挂起就绪

状态之间的转换:

  1. 准备就绪的进程,被CPU调度执行,变成运行态;
  2. 运行中的进程,进行I/O请求或者不能得到所请求的资源,变成阻塞态;
  3. 运行中的进程,进程执行完毕(或时间片已到),变成就绪态;
  4. 将阻塞态的进程挂起,变成挂起阻塞态,当导致进程阻塞的I/O操作在用户重启进程前完成(称之为唤醒),挂起阻塞态变成挂起就绪态,当用户在I/O操作结束之前重启进程,挂起阻塞态变成阻塞态;
  5. 将就绪(或运行)中的进程挂起,变成挂起就绪态,当该进程恢复之后,挂起就绪态变成就绪态;

进程和线程的关系:

  • 一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。
  • 资源分配给进程,同一进程的所有线程共享该进程的所有资源。
  • 处理机分给线程,即真正在处理机上运行的是线程
  • 线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的办法实现同步。线程是指进程内的一个执行单元,也是进程内的可调度实体.

进程与线程的区别:

  • 运行方式不同

进程不能单独执行,它只是资源的集合。
进程要操作CPU,必须要先创建一个线程。
所有在同一个进程里的线程,是同享同一块进程所占的内存空间。

  • 关系

进程中第一个线程是主线程,主线程可以创建其他线程;其他线程也可以创建线程;线程之间是平等的。
进程有父进程和子进程,独立的内存空间,唯一的标识符:pid。

  • 速度

启动线程比启动进程快
运行线程和运行进程速度上是一样的,没有可比性
线程共享内存空间,进程的内存是独立的。

  • 创建

父进程生成子进程,相当于复制一份内存空间,进程之间不能直接访问
创建新线程很简单,创建新进程需要对父进程进行一次复制
一个线程可以控制和操作同级线程里的其他线程,但是进程只能操作子进程。

  • 交互

同一个进程里的线程之间可以直接访问。
两个进程想通信必须通过一个中间代理来实现。

  • 调度

线程作为调度和分配的基本单位,进程作为拥有资源的基本单位

  • 并发性

不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行

  • 拥有资源:

进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源.

  • 系统开销:

在创建或撤消进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤消线程时的开销。

以上就是区分python中的进程与线程的详细内容,更多关于python进程与线程的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python深入学习之闭包
Aug 31 Python
python实现向ppt文件里插入新幻灯片页面的方法
Apr 28 Python
Python使用minidom读写xml的方法
Jun 03 Python
Python实现base64编码的图片保存到本地功能示例
Jun 22 Python
浅析python3中的os.path.dirname(__file__)的使用
Aug 30 Python
Python3爬虫学习入门教程
Dec 11 Python
Python功能点实现:函数级/代码块级计时器
Jan 02 Python
numpy.where() 用法详解
May 27 Python
PyQT实现菜单中的复制,全选和清空的功能的方法
Jun 17 Python
零基础小白多久能学会python
Jun 22 Python
Python将字典转换为XML的方法
Aug 01 Python
Python SQLAlchemy库的使用方法
Oct 13 Python
python判断一个变量是否已经设置的方法
Aug 13 #Python
vscode+PyQt5安装详解步骤
Aug 12 #Python
python使用列表的最佳方案
Aug 12 #Python
Python实现播放和录制声音的功能
Aug 12 #Python
Python实现文件压缩和解压的示例代码
Aug 12 #Python
Python爬取数据并实现可视化代码解析
Aug 12 #Python
Python下载网易云歌单歌曲的示例代码
Aug 12 #Python
You might like
PHP5中使用DOM控制XML实现代码
2010/05/07 PHP
PHP对象Object的概念 介绍
2012/06/14 PHP
使用迭代器 遍历文件信息的详解
2013/06/08 PHP
非常好用的Zend Framework分页类
2014/06/25 PHP
php 伪造ip以及url来路信息方法汇总
2014/11/25 PHP
PHP页面转UTF-8中文编码乱码的解决办法
2015/10/20 PHP
PHP PDOStatement::fetchColumn讲解
2019/01/31 PHP
图片连续滚动代码[兼容IE/firefox]
2009/06/11 Javascript
Prototype Template对象 学习
2009/07/19 Javascript
JQuery实现防止退格键返回的方法
2015/02/12 Javascript
JavaScript实现列表分页功能特效
2015/05/15 Javascript
jQuery-1.9.1源码分析系列(十)事件系统之事件包装
2015/11/20 Javascript
认识Knockout及如何使用Knockout绑定上下文
2015/12/25 Javascript
轻松5句话解决JavaScript的作用域
2016/07/15 Javascript
jQuery实现的省市县三级联动菜单效果完整实例
2016/08/01 Javascript
原生js实现查询天气小应用
2016/12/09 Javascript
JS闭包可被利用的常见场景小结
2017/04/09 Javascript
谈谈JS中的!!
2017/12/07 Javascript
js Element Traversal规范中的元素遍历方法
2018/04/19 Javascript
vue项目中api接口管理总结
2018/04/20 Javascript
在Mac OS上部署Nginx和FastCGI以及Flask框架的教程
2015/05/02 Python
使用FastCGI部署Python的Django应用的教程
2015/07/22 Python
Python实现生成随机数据插入mysql数据库的方法
2017/12/25 Python
numpy中的高维数组转置实例
2018/04/17 Python
Matplotlib 生成不同大小的subplots实例
2018/05/25 Python
Django1.9 加载通过ImageField上传的图片方法
2018/05/25 Python
Python功能点实现:函数级/代码块级计时器
2019/01/02 Python
django框架forms组件用法实例详解
2019/12/10 Python
python连接mongodb集群方法详解
2020/02/13 Python
python字符串常用方法及文件简单读写的操作方法
2020/03/04 Python
基于Python把网站域名解析成ip地址
2020/05/25 Python
Python 使用office365邮箱的示例
2020/10/29 Python
人事主管岗位职责范本
2013/12/04 职场文书
个人求职信范例
2014/01/29 职场文书
中药学自荐信
2014/06/15 职场文书
经典演讲稿开场白
2014/08/25 职场文书