给线程的最短时间

时间:2017-03-21 07:51:32

标签: java multithreading performance cpu low-level

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

问题:当一个线程进入(Runnable - state) - 即:它正在执行,并且它正在给出一条指令(比如通过调用方法addOneToX(int x)),该线程是否可能在完成指令之前退出或停止其工作,但在它开始执行之后。换句话说,高级语言中的大多数指令都被解码为机器专用语言,并在CPU中分解为多个机器周期(时钟周期)。所以我想这很明显,相应:

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

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

2 个答案:

答案 0 :(得分:2)

没有保证的最短时间。

调度程序决定时间片的内容。通常你可以期待从毫秒到大约100毫秒的任何事情。但这个价值往往是动态的。此外,一个线程甚至可能遇到一个极端,比如只运行一条恰好是I / O的指令,线程就会阻塞并被推出CPU。

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

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

答案 1 :(得分:1)

  

线程处于Runnable状态的最短时间是多少?

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

几乎可以肯定,它不到一秒钟。很可能不到100毫秒。除此之外,很难说。

  

线程如何保存其状态以便以后使用它?

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

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

相关问题