区分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类型强制转换long to int的代码
Feb 10 Python
python里使用正则表达式的组嵌套实例详解
Oct 24 Python
python3爬取各类天气信息
Feb 24 Python
python实现windows下文件备份脚本
May 27 Python
详解python selenium 爬取网易云音乐歌单名
Mar 28 Python
Python 中包/模块的 `import` 操作代码
Apr 22 Python
Python数据类型之Dict字典实例详解
May 07 Python
python如何将两个txt文件内容合并
Oct 18 Python
python itsdangerous模块的具体使用方法
Feb 17 Python
浅谈Django中的QueryDict元素为数组的坑
Mar 31 Python
python 实现非极大值抑制算法(Non-maximum suppression, NMS)
Oct 15 Python
python通过新建环境安装tfx的问题
May 20 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
php 各种应用乱码问题的解决方法
2010/05/09 PHP
php file_put_contents()功能函数(集成了fopen、fwrite、fclose)
2011/05/24 PHP
php json_encode值中大括号与花括号区别
2013/09/30 PHP
php筛选不存在的图片资源
2015/04/28 PHP
PHP中strncmp()函数比较两个字符串前2个字符是否相等的方法
2016/01/07 PHP
php实现的简单中文验证码功能示例
2017/01/03 PHP
thinkphp关于简单的权限判定方法
2017/04/03 PHP
不错的一个日期输入 动态
2006/11/06 Javascript
jQuery Ajax 全解析
2009/02/08 Javascript
jquery控制背景音乐开关与自动播放提示音的方法
2015/02/06 Javascript
javascript实现带下拉子菜单的导航菜单效果
2015/05/14 Javascript
JavaScript实现仿新浪微博大厅和腾讯微博首页滚动特效源码
2015/09/15 Javascript
跟我学习javascript的arguments对象
2015/11/16 Javascript
angularjs实现搜索的关键字在正文中高亮出来
2017/06/13 Javascript
AngularJS学习笔记之表单验证功能实例详解
2017/07/06 Javascript
Angular2环境搭建具体操作步骤(推荐)
2017/08/04 Javascript
nodejs中密码加密处理操作详解
2018/03/20 NodeJs
Express本地测试HTTPS的示例代码
2018/06/06 Javascript
vue实现将数据存入vuex中以及从vuex中取出数据
2019/11/08 Javascript
Node在Controller层进行数据校验的过程详解
2020/08/28 Javascript
JavaScript实现4位随机验证码的生成
2021/01/28 Javascript
[01:21]辉夜杯战队访谈宣传片—CDEC
2015/12/25 DOTA
[01:56]无止竞 再出发——中国军团出征2017年DOTA2国际邀请赛
2017/07/05 DOTA
[04:09]2018年度DOTA2社区贡献奖-完美盛典
2018/12/16 DOTA
dataframe设置两个条件取值的实例
2018/04/12 Python
Python将一个CSV文件里的数据追加到另一个CSV文件的方法
2018/07/04 Python
python实现祝福弹窗效果
2019/04/07 Python
wxPython修改文本框颜色过程解析
2020/02/14 Python
为什么说python适合写爬虫
2020/06/11 Python
护士工作失误检讨书
2014/09/14 职场文书
2014年党员学习“三严三实”思想汇报
2014/09/15 职场文书
2014年党建工作总结
2014/11/11 职场文书
中学教师个人总结
2015/02/10 职场文书
2015年环卫工作总结
2015/04/28 职场文书
小学生勤俭节约倡议书
2015/04/29 职场文书
2019员工保密协议书(3篇)
2019/09/23 职场文书