谈谈进程和线程的区别

进程和线程的区别是面试提问频率最高的问题,没有之一


我们首先了解一下进程和线程的概念。

进程:一个进程就是一个正在执行程序的实例。

线程:操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。

 

这就是进程和线程。从他们的概念扩展开来,我们可以这样回答进程和线程的区别:

1、一个程序至少有一个进程,一个进程至少有一个线程,线程是轻量级的进程。

2、进程在执行过程中拥有独立的存储空间,而多个线程共享内存。

3、进程是系统资源分配的最小单位,线程是CPU调度的最小单位。

A process is an active program i.e. a program that is under execution. It is more than the program code as it includes the program counter, process stack, registers, program code etc. Compared to this, the program code is only the text section.

A thread is a lightweight process that can be managed independently by a scheduler. It improves the application performance using parallelism. A thread shares information like data segment, code segment, files etc. with its peer threads while it contains its own registers, stack, counter etc.

 

这样的回答可能能够通过面试官的考核,但并没有真正点明问题所在。

比如在Linux系统上,实际上线程的概念并不存在。

线程仅仅被视为一个与其他进程共享资源的进程。

而Windows则提供了线程专有的机制。

 

进程的概念是比较明确的,它就对应着程序的一次运行。

那么线程到底是啥?

CSAPP把线程称为进程的一个执行单元。

维基百科把线程称为操作系统能够进行运算调度的最小单位。

 

听起来还是云里雾里的。

那么,要解答线程“是”什么,不如先看看线程“有”什么。

线程的所有物,主要就是以下几部分:

程序计数器,一组寄存器、栈和状态字。

另外,它还共享地址空间、全局变量、打开的文件等,也就是进程的资源。

 

我们可以看到,这些共享的资源,主要是内存相关的。

而线程独有的这些东西,则对应着CPU的执行逻辑。

 

因此,我对线程的理解就是:被进程管理的,共享资源的一次完整的CPU执行逻辑组合

 

posted on 2019-04-29 16:34  s1a1n1d1  阅读(242)  评论(0编辑  收藏  举报