【问题标题】:What makes a thread and a process unique?是什么让线程和进程独一无二?
【发布时间】:2018-08-19 23:36:11
【问题描述】:

是什么使一个线程与同一进程中的其他线程不同,又是什么使一个进程与其他进程不同? (我所说的独特是指它与其他人的不同之处?)

【问题讨论】:

  • 我投票结束这个问题作为题外话,因为它不是(还)一个编程问题。请改写为编程问题。分享一些不起作用的代码,并提出一个具体的问题。
  • 我不太清楚你的意思,这听起来更像是一个哲学问题。是什么让我的笔记本电脑屏幕与您的笔记本电脑屏幕不同?是什么让我的咖啡与同一办公楼中的其他咖啡不同?

标签: c multithreading unix process cpu


【解决方案1】:

每个线程都有自己的stack,以及自己的执行上下文。 (堆栈是线程存储其局部变量的内存区域,执行上下文是与线程关联的各种 CPU 寄存器的状态。每当线程运行时,此状态都会将loaded in 发送到 CPU 的硬件寄存器,并且每当线程暂停以让另一个线程运行时保存到内存中。)

每个进程都有自己的address space。 (进程的地址空间是从虚拟地址到物理 RAM 地址的映射——这个映射由计算机的MMU 处理,并为该进程中的线程提供了他们拥有计算机 RAM 的错觉——尤其是,默认情况下一个进程不可能读取或写入另一个进程的数据,因为每个进程的虚拟地址默认映射到计算机物理 RAM 的单独部分)

请注意,每个进程都会有一个或多个线程在其中运行,并且在同一进程中运行的所有线程共享相同的地址空间,因此可以根据需要读取/写入彼此的数据。

【讨论】:

  • 首先,线程不一定有栈。堆栈不是线程的定义特征。尽管大多数线程确实有堆栈。其次,堆栈实际上是执行上下文的一部分。第三,从根本上说,线程没有执行上下文,它执行上下文。第四,多道程序在技术上不需要虚拟内存。最后,这些都没有回答这个问题,即线程和进程是如何区分的。
  • 这个问题问的是什么使线程(或进程)独一无二,而不是关于如何区分线程和进程。我知道,这是一个微妙的区别,但我们在这里。至于没有堆栈的线程,我原则上可以想象这样的事情,但我在现实生活中从未见过,是吗?
  • 有什么细微的区别?
  • “如何区分两个线程”是解析问题的一种方法——正如 Dai 在他的回答中指出的那样,这就是线程 ID 的用途。 “是什么使线程与其他线程不同”是一个更深层次的问题,即线程 A 的所有属性使其与线程 B 不同?这就是我回答的问题。
【解决方案2】:

操作系统将为每个线程分配一个唯一的线程 ID - 并且对于每个进程都相同:进程 ID 或 pid。鉴于同一进程中的多个线程在其他方面可能相同(即相同的入口点、相同的堆栈内容、相同的指令指针),这意味着线程 ID 是识别线程的唯一方法。进程也是如此。

【讨论】:

  • 我认为重要的是要提到线程 ID 和进程 ID 通常只是 32 位整数,它们通常从同一个整数池中提取,并且 ID 可以在线程/进程死亡。
猜你喜欢
  • 1970-01-01
  • 2011-03-16
  • 1970-01-01
  • 1970-01-01
  • 2010-09-17
  • 2012-12-10
  • 2011-01-15
相关资源
最近更新 更多