我想知道有太多线程可能会影响给定特定线程的时间量。
例如,如果我的进程有100个线程,那么下一个/调度线程的量子/突发数是否少于1000个线程,因为调度会花费更多时间?
IMO,由于调度运行它自己的进程,它有自己的线程来进行调度,因此它不应该影响其他线程量子(但应该为下一个/调度线程的执行引入一些延迟)。 / p>
还有什么想法?
答案 0 :(得分:1)
除非您的操作系统是从头开始设计为hard-real-time OS(例如Xenomai或VxWorks),否则您会发现操作系统的调度程序提供非常非常少的保证,关于线程何时运行,或者运行时它们将继续运行多长时间。
鉴于上述情况,完全可能在同一台计算机上存在其他线程(无论它们是您自己进程内的线程还是其他进程中的线程)都会影响您自己的线程的CPU时间量接收。例如,如果其他线程的运行优先级高于线程,并且存在CPU内核争用(即,更多线程希望在特定时间运行,而不是运行它们的CPU内核),则调度程序将在量子到期之前,将其中一个正在运行的线程从其当前的CPU内核中释放出来,以便现在可以运行的更高优先级的线程可以立即开始执行。
一般来说,这类问题的答案是"有龙"多样性 - 也就是说,如果你已经正确编写了多线程程序,那么你就不应该知道(或关心)你的线程接收的量子大小,因为你的代码应该能够正确运行而不管确切地说,调度程序如何将时间片分配给线程。
(例外情况是absolutely need real-time behavior;在这种情况下,您可能希望在可以为您提供所需保证的实时操作系统上运行。
至于调度程序确定哪个线程开始运行需要多长时间,拥有更多线程确实增加了调度程序的开销,但在大多数操作系统上,增加非常少 - 调度算法为{关于线程数,{1}}甚至O(log N)
。你仍然可以让电脑“撞墙”#34;当然,如果你无限期地增加更多的线程,但你最终命中的限制更可能与RAM耗尽有关,而不是调度算法的性能。
答案 1 :(得分:0)
使用令人困惑的“一对多”术语,您真正处理的是模拟线程。这不是操作系统实现,而是库实现。该库将不知道量子,操作系统将不知道线程。因此,正如您所建议的那样,线程对量子和进程调度没有任何影响。