程序员

进程&线程

2017-08-28  本文已影响0人  high_m

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


进程

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

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

进程的状态图示如下:


进程状态图

线程

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

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

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

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

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


引自[并发编程的艺术]

区别总结

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


通信方式

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

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

上一篇 下一篇

猜你喜欢

热点阅读