进程是线程还是线程是进程?

3

我被问到了这个面试问题。我回答说线程是进程的一部分,但面试官并不同意。这很令人困惑,我找不到任何清晰的答案。


面试官是特别询问 PThreads 还是一般的线程? - alk
@alk 他一般性地在问,这有关系吗? - cbinder
1
@cbinder-这个问题不会有影响。虽然我因为它所携带的深层次背景而点赞了这个问题,但通常的答案很简单。请查看我的回答! - Am_I_Helpful
4个回答

2
我觉得这是一个糟糕的问题。
  1. 两者都是独立的执行块
  2. 两者都由操作系统进行调度
  3. 线程在进程上下文中运行,与进程共享内存。
  4. 我想不出有什么时候线程会有自己的地址空间
按照这个逻辑,我同意你的答案,即线程是一个进程。我认为这是一个有点棘手的问题。我本来想请你解释一下它们之间的区别。
要了解更多信息,请查看这个主题的好文章

总的来说,不完全是这样。一个进程是应用程序实例的环境,而线程是执行的单位。没有线程的进程无法做任何事情,这就是为什么操作系统进程加载器在加载进程初始工作集时会引发一个线程 - 以运行其入口点处的代码。 - Martin James

2

每个进程都是一个线程,但并不是每个线程都是进程。

线程只是一系列独立的操作序列。进程有额外的上下文。


根据维基百科的说法,“多个线程可以存在于同一进程中并共享诸如内存之类的资源,而不同的进程则不共享这些资源”。那么,如果两个进程不共享资源,根据这个定义,它们怎么可能成为线程呢? - cbinder
好的,假设一个进程至少包含一个线程,那么它只是一些线程的上下文环境? - thi gg
@cbinder:并非所有的线程都生活在同一个上下文中。 - alk

2
一个进程是应用程序的执行实例。 线程是进程内的执行路径。此外,一个进程可以包含多个线程
1.

需要注意的是,线程可以做任何进程可以做的事情。 但是,由于一个进程可以由多个线程组成,所以线程可以被认为是“轻量级”进程。因此,线程和进程之间的基本区别在于它们用于完成的工作。线程用于小任务,而进程用于更“重量级”的任务-基本上是应用程序的执行。

2.

线程和进程之间的另一个区别是,同一进程中的线程共享相同的地址空间,而不同进程则没有。这允许线程从相同的数据结构和变量中读取和写入,并促进线程之间的通信。进程之间的通信-也称为IPC或进程间通信-非常困难且资源密集。


嗯...你的意思是线程是轻量级进程,我们不能直接说它们之间的一对一关系..在得到几个支持这个观点的回复后,我会将其作为答案接受.. :) - cbinder
请说明下投反对票的原因! - Am_I_Helpful

1

线程的本质高度依赖于系统。例如,一些系统将线程实现为操作系统的一部分。其他系统通过运行时库实现线程。进程本身管理其自己的线程(而不是操作系统),对于不同的进程,管理可能会有所不同(例如,Java线程与Ada线程的实现方式不同)。

在操作系统调度的线程中,线程和进程是不同的术语。进程是具有多个可调度执行线程的地址空间。

在运行时库调度的线程中,进程就是一个线程。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接