进程&线程

写这篇博客(不仅仅是这篇)的初衷是在朋友的推荐下,阅读了一篇文章你应该知道的JAVA面试题,里面提出了若干方面的面试题,有兴趣的你可以点进去看一下。文章的作者是阿里的一位技术大牛方腾飞,从这一角度来看我认为还是非常有意义、有价值的面试题。我与朋友约定,站在自身的知识角度共同来答复这些面试题。一方面在于分享与共同探讨知识,二是培养自己的思考写作习惯,提升自己。本文仅仅是开始


进程

进程是系统进行资源分配和调度的基本单位。在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。

进程相对于程序而言,进程是一个活动的实体,而程序是一个没有生命的实体。只有当系统在执行程序时,它才能转为一个活动的实体(进程)。

进程的状态图示如下:


进程状态图

线程

线程,有时被称为轻量级进程,是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。

已经有可进程,为何要引入线程呢?

60年代,在OS中能拥有资源和独立运行的基本单位是进程,然而随着计算机技术的发展,进程出现了很多弊端,一是由于进程是资源拥有者,创建、撤消与切换存在较大的时空开销,因此需要引入轻型进程;二是由于对称多处理机(SMP)出现,可以满足多个运行单位,而多个进程并行开销过大。
因此在80年代,出现了能独立运行的基本单位——线程(Threads)。

总之,相较进程而言,线程更加轻巧,同一进程内的线程切换更加迅速且开销小。线程可并发执行(你也可以尝试着去了解并行与并发的区别),共享进程资源。在多线程操作系统中,进程不再是一个可执行的实体,由线程所取代

线程的状态跟进程类似,也有就绪,运行,阻塞状态,不过可能细节更加丰富具体。
线程的状态示意图如下:


引自[并发编程的艺术]

区别总结

上面的阐述中或多或少都有些线程与进程的区别描述,这里做下总结。

  • 地址空间和其它资源(如打开文件):进程间相互独立,同一进程的各线程间共享。某进程内的线程在其它进程不可见。
  • 通信:进程间通信与线程间通信方式不同。
  • 调度和切换:线程上下文切换比进程上下文切换要快得多。
  • 在多线程OS中,进程不是一个可执行的实体。

通信方式

进程间通信,参考文章如下:
进程间通信方式
进程间通信介绍

线程间通信,参考文章如下:
线程通信
线程间的通信、同步方式与进程间通信方式

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容