线程量子:如何计算它
Thread Quantum: How to compute it
我一直在阅读一些关于线程量程的帖子和文章 (here, here and here)。显然 Windows 根据 windows "mode" (服务器或其他)为线程量程分配固定数量的 CPU 滴答。然而从最后的 link 我们可以读到:
(A thread quantum) between 10-200 clock ticks (i.e. 10-200 ms) under Linux, though some
granularity is introduced in the calculation
有什么方法可以计算 Linux 上的量子长度吗?
无论如何计算它是否有意义? (因为根据我的理解,线程仍然可以被抢占,所以在整个量程期间没有任何东西强制线程达到 运行)
从开发人员的角度来看,我可以看到编写一个程序的兴趣,该程序可以根据线程数预测程序的 运行ning 时间,并且 "what they do"(可能删除所有测试以找到最佳线程数会有点简洁,尽管我不确定这是正确的方法)
- 在 Linux 上,默认的实时量子长度常数是 declared as
RR_TIMESLICE
,至少在 4.x 内核中是这样; HZ
必须在配置内核时定义。
- 在 暂停量程已过期的线程并恢复它之间的间隔可能取决于很多因素,例如,load average。
- 为了能够至少以某种程度的准确性预测运行时间,给出目标过程realtime priority; realtime processes are scheduled following a round-robin algorithm,这通常比常见的Linux更简单且更可预测调度算法。
- 要获取实时量子长度,调用
sched_rr_get_interval()
。
我一直在阅读一些关于线程量程的帖子和文章 (here, here and here)。显然 Windows 根据 windows "mode" (服务器或其他)为线程量程分配固定数量的 CPU 滴答。然而从最后的 link 我们可以读到:
(A thread quantum) between 10-200 clock ticks (i.e. 10-200 ms) under Linux, though some granularity is introduced in the calculation
有什么方法可以计算 Linux 上的量子长度吗? 无论如何计算它是否有意义? (因为根据我的理解,线程仍然可以被抢占,所以在整个量程期间没有任何东西强制线程达到 运行)
从开发人员的角度来看,我可以看到编写一个程序的兴趣,该程序可以根据线程数预测程序的 运行ning 时间,并且 "what they do"(可能删除所有测试以找到最佳线程数会有点简洁,尽管我不确定这是正确的方法)
- 在 Linux 上,默认的实时量子长度常数是 declared as
RR_TIMESLICE
,至少在 4.x 内核中是这样;HZ
必须在配置内核时定义。 - 在 暂停量程已过期的线程并恢复它之间的间隔可能取决于很多因素,例如,load average。
- 为了能够至少以某种程度的准确性预测运行时间,给出目标过程realtime priority; realtime processes are scheduled following a round-robin algorithm,这通常比常见的Linux更简单且更可预测调度算法。
- 要获取实时量子长度,调用
sched_rr_get_interval()
。