【问题标题】:How exactly does cpu runs each threads?cpu 究竟是如何运行每个线程的?
【发布时间】:2020-02-13 21:16:58
【问题描述】:

1,我总是被告知每个线程都是执行上下文,但是线程究竟包含什么?它似乎包含调用堆栈、cpu 寄存器和实际执行代码?

2、线程也有两种——操作系统级线程和用户级线程。它们相互映射。对于cpu runs thread,cpu是只运行在其中一个上还是只运行在os级线程上?

3、说明cpurun线程是如何工作的有点混乱。我的意思是,据我所知,CPU 只能运行 0 和 1 的机器代码。那么 CPU 的上下文切换是什么意思?如果每个线程都包含作为指令的二进制文件,而 cpu 只是运行不同的指令?

【问题讨论】:

  • AFAIK 如今,“用户线程”与“操作系统级线程”的概念只是学术性的。曾经对用户模式调度程序、光纤等进行了实验,其中几个用户线程共享一个“真实”线程。从操作系统的角度来看,用户模式中的主流 Linux 线程与线程匹配。也就是说,当一个线程进行系统调用时,它会切换到内核模式,并保留它的身份,当然,转换到内核模式需要对执行上下文进行一定的更改,尤其是堆栈指针。当用户模式代码是 32 位但内核是 64 位或不同架构时更深刻的切换。

标签: java memory cpu


【解决方案1】:

为了给出简短且过于简化的版本,假设:

  • 您拥有一个内核和多个指令流(也称为线程、进程或程序)。
  • CPU 可以中断一个执行流并跳转到另一个地址,即中断处理程序。如果时钟连接到此中断引脚,则可以定期产生外部中断。

运行多个线程或进程依赖于上下文切换的概念。

上下文切换意味着当前的指令流(线程)被中断,所有寄存器都保存在堆栈上,堆栈指针改变并加载另一个上下文,所有保存的寄存器都从其堆栈中恢复。

轻量级线程和进程之间的区别在于它们是否共享内存空间以及是否可以与共享内存通信。

【讨论】:

  • 谢谢! cpu执行的线程,是内核级线程还是用户级线程?
  • 从上下文切换的概念层面来看它们是相同的,但至少调度程序是一个特权内核级进程
  • 也许我应该改写一下,说一个java应用程序使用它的运行时生成的线程,这些编译后的线程是cpu直接执行的吗?还是运行相应的操作系统级线程?
  • @TonyLin say a java application uses thread - 如果您特别对 java 感兴趣,最好将问题标记为“java”。这与“组装”本身几乎没有关系。
猜你喜欢
  • 2012-06-12
  • 1970-01-01
  • 1970-01-01
  • 2011-03-03
  • 2019-07-13
  • 2014-05-16
  • 1970-01-01
  • 2012-11-04
  • 2021-07-02
相关资源
最近更新 更多