设为首页 收藏本站
查看: 890|回复: 0

[经验分享] Python线程与进程的区别

[复制链接]

尚未签到

发表于 2018-8-5 10:17:34 | 显示全部楼层 |阅读模式
进程的基本概念
  概念
  进程就是一个程序在一个数据集上的一次动态执行过程。 进程一般由程序、数据集、进程控制块三部分组成。我们编写的程序用来描述进程要完成哪些功能以及如何完成;数据集则是程序在执行过程中所需要使用的资源;进程控制块用来记录进程的外部特征,描述进程的执行变化过程,系统可以利用它来控制和管理进程,它是系统感知进程存在的唯一标志。
线程的基本概念
  概念
  线程是进程中执行运算的最小单位,是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。
  好处

  • 易于调度。
  • 提高并发性,通过线程可方便有效地实现并发性。进程可创建多个线程来执行同一程序的不同部分。
  • 开销少,创建线程比创建进程要快,所需开销很少
  进程的基本状态及状态之间的关系
  状态:运行、阻塞、挂起阻塞、就绪、挂起就绪
  状态之间的转换:

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

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

  •   运行方式不同

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

  •   关系

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

  •   速度

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

  •   创建

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

  •   交互

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

  • 调度

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

  • 并发性

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

  • 拥有资源:

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

  • 系统开销:

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


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-546882-1-1.html 上篇帖子: python 文件操作练习 下篇帖子: python 基本算法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表