繁体   English   中英

给线程的最短时间

[英]Minimum Time given to a thread

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

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

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

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

没有保证的最短时间。

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

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

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM