我如何知道给线程的实际时间片?

Posted

技术标签:

【中文标题】我如何知道给线程的实际时间片?【英文标题】:How do I get to know the actual time slice given to a thread? 【发布时间】:2017-09-15 07:27:45 【问题描述】:

我了解实际时间片是可变的,取决于操作系统和处理器等多种因素。

但是有没有一种方法可以让线程计算在它拥有自己的 CPU 期间分配给它的时间片?

【问题讨论】:

使用sysinternals中的工具检查? ***.com/questions/1393006/… 的副本? 声明:我喜欢这个问题。它令人深思;并且实现一个线程可以测量其自身利用率的东西听起来像是一个有趣的挑战! @GhostCat:谢谢。 :-) 【参考方案1】:

有趣的问题;但我认为:可能不会。

为了从线程内部测量这个,线程需要知道两个事件:

    线程已启动/恢复;获取 CPU 时间;并开始运行 线程被“挂起”,并停止执行

从那里:即使您找到了一种机制来告诉线程“您刚刚被恢复” - 您如何告诉线程何时暂停?换句话说:您将需要两个钩子,以某种方式通知线程不仅“您已恢复”;还有关于“你很快就会被停职”;以便线程本身可以进行簿记。

鉴于您的评论:是的,如果底层操作系统允许确定 CPU 切片的持续时间并且持续时间是恒定;那么线程就不需要知道“事件 2”。

【讨论】:

谢谢。由于你提到的原因,我也很怀疑。如果这不可能,是否可以从操作系统结构中读取一个变量,告诉您时间片测量多少? 我更新了我的答案;但仍处于元级别;因为我缺少深入的 .Net 和 Windows 操作系统知识,无法给出真正的技术性答案。

以上是关于我如何知道给线程的实际时间片?的主要内容,如果未能解决你的问题,请参考以下文章

3.如何理解开多线程可以充分利用CPU?

多线程与进程

go协程goroutine与Java多线程比较

1.1多线程上下文切换

线程数是啥

多线程时间片问题