调度和线程量程
Scheduling and thread quantum
我想知道线程过多是否会潜在地影响分配给特定线程的时间量。
例如,如果我的进程有 100 个线程,next/scheduled 线程是否可以比 1000 个线程少 quantum/burst,因为调度会花费更多时间?
IMO,因为调度运行它自己的进程,它有自己的线程来进行调度,所以它不应该影响其他线程量程(但应该为 next/scheduled 的执行引入一些延迟线程)。
还有什么想法吗?
使用令人困惑的 "one-to-many" 术语,您真正处理的是模拟线程。这不是操作系统实现,而是库实现。库不知道量子,操作系统也不知道线程。因此,正如您所建议的那样,线程对量子和进程调度的影响为零。
除非您的操作系统从头开始设计为 hard-real-time OS (e.g. Xenomai or VxWorks),否则您会发现 OS 的调度程序对线程何时运行提供的保证非常非常少到达 运行,或者当他们 运行.
时,他们将继续 运行ning 多长时间
鉴于上述情况,同一台计算机上存在其他线程(无论它们是您自己进程中的线程还是其他进程中的线程)很可能会影响您的 CPU 时间量自己的线程接收。例如,如果其他线程 运行ning 的优先级高于您的线程,并且存在 CPU 核心的争用(即更多线程想要 运行 在特定时间比那里是 CPU 核心到 运行 它们打开),那么调度程序将在其量程到期之前将您的 运行ning 线程之一踢出其当前 CPU 核心,以便现在-ready-to-运行 更高优先级的线程可以立即开始执行。
一般来说,这类问题的答案是 "there be dragons" 种类——也就是说,如果您正确地编写了多线程程序,那么您不必知道(或care) 你的线程收到的量子大小是多少,因为你的代码应该能够 运行 正确地不管调度程序如何将时间片分发给线程。
(例外情况是您 absolutely need real-time behavior;在这种情况下,您可能希望 运行 实时 OS 可以为您提供所需的保证)
至于调度程序需要多少时间来确定启动哪个线程 运行ning,拥有更多线程确实会增加调度程序的开销,但在大多数操作系统上,这种增加是非常微不足道的——调度算法在线程数方面是 O(log N)
甚至 O(1)
。当然,如果您无限期地添加更多线程,您仍然可以使计算机 "hit the wall",但是您最终达到的限制更可能与 RAM 耗尽有关,而不是与调度算法的性能有关。
我想知道线程过多是否会潜在地影响分配给特定线程的时间量。
例如,如果我的进程有 100 个线程,next/scheduled 线程是否可以比 1000 个线程少 quantum/burst,因为调度会花费更多时间?
IMO,因为调度运行它自己的进程,它有自己的线程来进行调度,所以它不应该影响其他线程量程(但应该为 next/scheduled 的执行引入一些延迟线程)。
还有什么想法吗?
使用令人困惑的 "one-to-many" 术语,您真正处理的是模拟线程。这不是操作系统实现,而是库实现。库不知道量子,操作系统也不知道线程。因此,正如您所建议的那样,线程对量子和进程调度的影响为零。
除非您的操作系统从头开始设计为 hard-real-time OS (e.g. Xenomai or VxWorks),否则您会发现 OS 的调度程序对线程何时运行提供的保证非常非常少到达 运行,或者当他们 运行.
时,他们将继续 运行ning 多长时间鉴于上述情况,同一台计算机上存在其他线程(无论它们是您自己进程中的线程还是其他进程中的线程)很可能会影响您的 CPU 时间量自己的线程接收。例如,如果其他线程 运行ning 的优先级高于您的线程,并且存在 CPU 核心的争用(即更多线程想要 运行 在特定时间比那里是 CPU 核心到 运行 它们打开),那么调度程序将在其量程到期之前将您的 运行ning 线程之一踢出其当前 CPU 核心,以便现在-ready-to-运行 更高优先级的线程可以立即开始执行。
一般来说,这类问题的答案是 "there be dragons" 种类——也就是说,如果您正确地编写了多线程程序,那么您不必知道(或care) 你的线程收到的量子大小是多少,因为你的代码应该能够 运行 正确地不管调度程序如何将时间片分发给线程。
(例外情况是您 absolutely need real-time behavior;在这种情况下,您可能希望 运行 实时 OS 可以为您提供所需的保证)
至于调度程序需要多少时间来确定启动哪个线程 运行ning,拥有更多线程确实会增加调度程序的开销,但在大多数操作系统上,这种增加是非常微不足道的——调度算法在线程数方面是 O(log N)
甚至 O(1)
。当然,如果您无限期地添加更多线程,您仍然可以使计算机 "hit the wall",但是您最终达到的限制更可能与 RAM 耗尽有关,而不是与调度算法的性能有关。