给线程的最小时间

Minimum Time given to a thread

我的问题是关于一般的线程(例如:在 Java 中)。

问题:当线程处于(可运行 - 状态)时 - 即:它正在执行,并且正在发出指令(比如通过调用方法 addOneToX(int x)),是否有可能线程在完成指令之前但在开始执行指令之后退出或停止其工作。换句话说,高级语言中的大部分指令都被解码为机器特定语言,并分解为 CPU 中的多个机器周期(时钟周期)。所以我想很清楚,因此:

1>线程处于可运行状态的最短时间是多少?

2> 线程如何保存它的状态以便稍后访问它? (即:当它退出 Runnable 状态并稍后返回到它从停止的地方继续时)

没有保证的最短时间。

调度程序决定时间片是什么。通常您可以期望从几分之一毫秒到大约 100 毫秒不等。但通常这个值会动态变化。此外,线程甚至可能遇到极端情况,如 运行 只有一条指令恰好是 I/O,线程会阻塞并被推出 CPU.

高级语言指令最终被翻译成(可能)多个CPU指令。 CPU 指令是不会被中断执行的原子部分,除了程序可以在两条指令之间的任何地方被中断,即使是在高级语言命令的中间。请注意,有一些特定的 CPU 指令(如原子获取和设置或获取和增加)可用于线程同步。

存储线程状态的基本(大大简化)想法是:将寄存器存储在 RAM 中并将指针存储到当前指令。

What is the minimum time given to a thread to be in the Runnable state?

最实用的 Java 实现使用 本机 线程:也就是说,它们允许操作系统处理调度线程的细节。大多数现代操作系统都提供了多种线程调度算法的选择,而且大多数算法都提供了许多可配置的参数。您的问题没有单一的答案。

几乎可以肯定,不到一秒。很可能少于 100 毫秒。除此之外,就不好说了。

How does the thread save its state so that it comes to it later?

线程的状态(在大多数编程语言中,包括 Java)由其 调用堆栈 和 CPU 寄存器组成。 CPU 寄存器包括一个指向调用堆栈顶部的寄存器,一个指向当前指令的寄存器,通常还有其他寄存器。

当需要切换线程时,OS 中断处理器(中断基本上强制立即调用函数)并且中断处理程序例程将所有 CPU 寄存器保存到内存位置这是为当前线程保留的。然后它恢复一些其他线程的寄存器,基本上 "returns" 到其他线程被中断的地方。