【问题标题】:Process is a thread or thread is a process?进程是线程还是线程是进程?
【发布时间】:2023-11-24 10:26:01
【问题描述】:

有人问我这个面试问题。我认为进程是线程的超集后回答线程是进程,但面试官不同意。这令人困惑,我无法找到任何明确的答案。

【问题讨论】:

  • 面试官问的是具体的 PThreads 还是一般的线程?
  • @alk 他在问一般...有关系吗?
  • @cbinder-这个问题无关紧要。虽然我赞成这个问题,因为它带有更深层次的背景,但通常的答案是一个简单的答案。检查我的答案!

标签: multithreading process operating-system


【解决方案1】:

我觉得这是一个可怕的问题。

  1. 两者都是独立的执行块
  2. 两者均由操作系统调度
  3. 线程在进程上下文中运行,与进程共享内存。
  4. 我想不出一个线程会有自己的地址空间的时候

按照这个逻辑,我同意你的回答,即线程是一个进程。我认为这是一个加载的问题。我会请你解释两者之间的区别。

欲了解更多信息,这里有一个很好的thread to view on the subject.

【讨论】:

  • 一般来说,并非如此。进程是应用程序实例的环境,线程是执行单元。没有线程的进程不能做任何事情,这就是为什么 OS 进程加载器会在加载进程初始工作集时引发一个线程 - 以在其入口点运行代码。
【解决方案2】:

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

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

【讨论】:

  • 根据wiki“多个线程可以存在于同一个进程中并共享内存等资源,而不同的进程不共享这些资源”。因此,如果两个进程不共享资源,那么它们如何成为这个定义中的线程..?
  • 好吧,假设一个进程包含至少一个线程,那么它只是多个线程的上下文?
  • @cbinder:并非所有的线程都生活在同一个上下文中。
【解决方案3】:

进程是应用程序的执行实例。

线程是进程内的执行路径。 另外,a process can contain multiple threads

1.

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

2.

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

【讨论】:

  • 嗯..你的意思是线程是一个轻量级的进程,我们不能直接说它们之间的一对一关系..在得到几个支持这一点的回复后,将其作为答案。 .:)
  • 请拒绝投票的原因!
【解决方案4】:

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

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

在 RTL 调度的线程中,进程是一个线程。

【讨论】: