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